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

Is it possible to use Count( ) function with WHERE Condition?

考虑这个table“蟋蟀”

团队 1 团队 2 获胜者 日期 新西兰元
新西兰 巴基斯坦 新西兰 2018-01-06 1
新西兰 英国 新西兰 2018-01-09 2
新西兰 印度 印度 2018-01-13 1
新西兰 孟加拉国 新西兰 2018-01-16 3

我通过查询得到了以上结果:

SELECT c.[Team 1],c.[Team 2],c.[Winner],
c.[Date], COUNT(*)OVER (Partition by c.[Winner] order by c.[Date]) AS NewZealandWon
FROM Cricket c
Group by c.[Date],c.[Team 1],c.[Team 2],c.[Winner]
Order by c.[Date]

但是当获胜者不是新西兰时,我想在“NewZelandWon”列中得到 NULL 如何将 Where 条件或任何其他条件与 Count() 函数一起使用?

我想要的输出如下:

团队 1 团队 2 获胜者 日期 新西兰元
新西兰 巴基斯坦 新西兰 2018-01-06 1
新西兰 英国 新西兰 2018-01-09 2
新西兰 印度 印度 2018-01-13
新西兰 孟加拉国 新西兰 2018-01-16 3

测试

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”;或许你应该更正一下 ;)

首先,我推荐 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 没有必要,所以我删除了它。