是否可以将Count()函数与WHERE条件一起使用



考虑这个表"板球;

获胜者新西兰新西兰印度新西兰
第一队 第二队 >日期 新西兰获胜
新西兰 巴基斯坦2018-01-06
新西兰 英格兰2018-01-09
新西兰 印度2018-01-13
新西兰 孟加拉国2018-01-16

首先,我推荐ROW_NUMBER()而不是COUNT(*)。尽管它们有细微的不同(当ORDER BY中有重复时会产生不同的结果(,但ROW_NUMBER()更口语化地表示您想要做的事情

其次,您只需要一个CASE表达式:

SELECT c.[Team 1], c.[Team 2], c.[Winner], c.[Date],
(CASE WHEN c.Winner = 'New Zealand'
THEN ROW_NUMBER() OVER (Partition by c.Winner order by c.[Date])
END) AS NewZealandWon
FROM Cricket c
ORDER BY c.[Date];

我认为GROUP BY没有必要,所以我把它去掉了

测试

SELECT c.[Team 1],
c.[Team 2],
c.[Winner],
c.[Date], 
COUNT(CASE WHEN c.[Team 1] = c.[Winner] THEN 1 END) OVER (PARTITION BY c.[Winner]) AS NewZealandWon
FROM Cricket c
Group by c.[Date],c.[Team 1],c.[Team 2],c.[Winner]
Order by c.[Date]

我会使用联接来实现这一点。

SELECT c.[Team 1],c.[Team 2],c.[Winner], c.[Date], w.[NewZealandWon]
FROM Cricket c 
LEFT JOIN (SELECT [Date], COUNT(*) AS NewZealandWon FROM Cricket WHERE [Winner]='New Zealand' GROUP BY [Date]) w ON w.[Date]=c.[Date]

顺便说一句,你的问题带有";mysql";但是查询看起来像是";mssql";也许你应该纠正这一点;(

最新更新