微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

考虑这张桌子“板球”

团队 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.[Winner]
Order by c.[Date]

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

我想要的输出如下:

团队 1 团队 2 获胜者 日期 新西兰获胜
新西兰 巴基斯坦 新西兰 2018-01-06 1
新西兰 英格兰 新西兰 2018-01-09 2
新西兰 印度 印度 2018-01-13 NULL
新西兰 孟加拉国 新西兰 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.[Winner]
Order by c.[Date]
,

我会使用连接来做到这一点。

SELECT c.[Team 1],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],(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 不是必需的,所以我删除了它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?