如何解决从CASE表达式中计数和GROUP值
试图按赛马市场中的偏爱顺序计算一匹马在前6名和GROUP
中的获胜总数和总次数。
我正在引用此答案,因为它正在寻找类似的结果Count the occurrences of DISTINCT values
我已经尝试过该表达式,但是当执行时,它在两个case列中都返回相同的数字
ie;
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 ;
编辑:似乎我不需要计算一个不同的值,但是GROUP
表达式返回的值CASE
偏向偏好(SPFav)
解决方法
使用第一个评论,这将提供以下可能的解决方案。
样本数据
create table EachWayBetting
(
SPFav int,FinishingPosition int
);
insert into EachWayBetting (SPFav,FinishingPosition) values
(1,1),(1,2),9),(2,7),8),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
,
我相信您应该将查询中的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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。