mysql - 多选,子组
问题描述
我有一点来自 SQL 的建议。我需要在两列中选择两个组(WHERE)。一些工作'喜欢':
SELECT COUNT(WHERE Draw=1) as D1, COUNT(WHERE Draw=2) as D2 FROM SampleData
示例数据表:
SampleData
--------------------
Id | Draw | Element
--------------------
1 | 1 | 13
2 | 1 | 15
3 | 1 | 22
4 | 1 | 36
5 | 1 | 45
6 | 2 | 11
7 | 2 | 15
8 | 2 | 22
并输出如下:
Output:
--------
D1 | D2
--------
5 | 3
解决方案
您可以CASE
为此使用表达式:
SELECT
COUNT(CASE WHEN Draw=1 THEN 1 END) as D1,
COUNT(CASE WHEN Draw=2 THEN 1 END) as D2
FROM SampleData
mysql 也支持If()
,因此您也可以执行以下操作。请记住,这不能移植到其他 RDBMS,但CASE
版本是:
SELECT
SUM(IF(Draw=1, 1, 0)) as D1,
SUM(IF(Draw=2, 1, 0)) as D2
FROM SampleData;
另外... mysql 支持布尔表达式的数学运算,因此您可以在这里变得非常简洁:
SELECT SUM(Draw=1) as D1, Sum(Draw=2) as D2 FROM SampleData;
同样,尽管这不能像CASE
表达式那样移植到其他 RDBMS。
推荐阅读
- java - 尝试将应用程序部署到本地 Tomcat 服务器时出错
- java - 使用 Hibernate Provider 的 JUnit 测试 JPA (java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo...)
- python-3.5 - 从两个列表创建自定义组合
- ms-access - 如果从 VBA 代码打开远程 Access 数据库,为什么退出该实例时它会变得可见一秒钟?
- c# - 如何检查是否加载了 .exe 文件来执行它?
- angularjs - 有没有办法在 Angular 中将访问令牌转换为 Base64 编码的字符串?
- c# - 求连续素数之和
- django - 本地设置找不到应用
- r - 拆分并重新连接字符串
- php - 为什么作曲家不使用 OPcache?