CASE 表达式中的计数值和 GROUP 值

Count and GROUP values from a CASE expression

尝试按赛马市场中的偏爱顺序统计一匹马进入前6和GROUP的总获胜次数和总次数。

我引用这个答案是因为它正在寻找类似的结果Count the occurrences of DISTINCT values

我试过这个表达式,但在执行时,它 returns 两个 case 列中的数字相同

即;

SPFav   WinsByFavouritism   PlaceByFavouritism
1       4143                4143
2       3963                3963
3       3853                3853

这是我的代码 运行 - 是什么原因造成的?

SELECT SPFav, 

COUNT(CASE WHEN FinishingPosition = 1 THEN 1 ELSE 0 END) as WinsByFavouritism,
COUNT(CASE WHEN FinishingPosition <= 6 THEN 1 ELSE 0 END) as PlaceByFavouritism

FROM [NRaceHistory].[dbo].[EachWayBetting]

GROUP BY SPFav 

ORDER BY SPFav ; 

使用第一个评论,这将给出以下可能的解决方案。

示例数据

create table EachWayBetting
(
  SPFav int,
  FinishingPosition int
);

insert into EachWayBetting (SPFav, FinishingPosition) values
(1, 1),
(1, 2),
(1, 2),
(1, 9),
(2, 7),
(2, 8),
(2, 2),
(2, 1);

解决方案

SELECT SPFav,
       COUNT(CASE WHEN FinishingPosition = 1 THEN 1 END) as WinsByFavouritism,
       COUNT(CASE WHEN FinishingPosition <= 6 THEN 1 END) as PlaceByFavouritism
FROM EachWayBetting
GROUP BY SPFav
ORDER BY SPFav

结果

SPFav WinsByFavouritism PlaceByFavouritism
----- ----------------- ------------------
1     1                 3
2     1                 2

Fiddle

我认为您应该将查询中的 COUNT 替换为 SUM。即它应该是:

SELECT SPFav, 
       SUM(CASE WHEN FinishingPosition = 1 THEN 1 ELSE 0 END) as WinsByFavouritism,
       SUM(CASE WHEN FinishingPosition <= 6 THEN 1 ELSE 0 END) as PlaceByFavouritism
FROM [NRaceHistory].[dbo].[EachWayBetting]
GROUP BY SPFav 
ORDER BY SPFav;