首页 > 解决方案 > 多选,子组

问题描述

我有一点来自 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

标签: mysql

解决方案


您可以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。


推荐阅读