SQL计数和组

时间:2017-05-03 11:50:00

标签: mysql sql

我有一个类似于这个的MySQL-db表:

id  date        class   more_info_one   more_info_two   etc
1   2017-05-03  1       …               …               …
2   2017-05-03  3       …               …               …
3   2017-05-11  1       …               …               …
4   2017-05-05  1       …               …               …
5   2017-05-12  2       …               …               …
6   2017-05-05  1       …               …               …
7   2017-05-04  2       …               …               …
8   2017-05-06  3       …               …               …
9   2017-05-12  3       …               …               …
10  2017-05-07  2       …               …               …
11  2017-05-09  1       …               …               …
12  2017-05-09  3       …               …               …
13  2017-05-11  1       …               …               …
14  2017-05-09  1       …               …               …
15  2017-05-04  2       …               …               …
16  2017-05-10  1       …               …               …
17  2017-05-03  2       …               …               …
18  2017-05-12  3       …               …               …
19  2017-05-12  3       …               …               …
20  2017-05-06  2       …               …               …
21  2017-05-03  1       …               …               …
22  2017-05-09  3       …               …               …
23  2017-05-06  1       …               …               …
24  2017-05-08  1       …               …               …
25  2017-05-11  2       …               …               …
26  2017-05-03  1       …               …               …
27  2017-05-09  2       …               …               …
28  2017-05-06  3       …               …               …
29  2017-05-12  3       …               …               …
30  2017-05-06  2       …               …               …
31  2017-05-07  1       …               …               …
32  2017-05-11  3       …               …               …
33  2017-05-07  1       …               …               …
34  2017-05-06  1       …               …               …
35  2017-05-08  2       …               …               …
36  2017-05-11  1       …               …               …
37  2017-05-12  2       …               …               …
38  2017-05-06  3       …               …               …
39  2017-05-05  3       …               …               …
40  2017-05-07  2       …               …               …

我想查找每个日期每个班级的数量,以便得到以下结果:

date        class_one   class_two   class_three
2017-05-03  3           1           1
2017-05-04  0           2           0
2017-05-05  2           0           3
2017-05-06  2           2           3
2017-05-07  2           2           0
2017-05-08  1           1           0
2017-05-09  2           1           2
2017-05-10  1           0           0
2017-05-11  3           1           1
2017-05-12  0           2           4

如何使用SQL执行此操作?我猜我需要数数,分组,也许有些加入,但我无法弄清楚如何。

1 个答案:

答案 0 :(得分:4)

您可以使用条件聚合:

select date, sum(class = 1) as class_1, sum(class = 2) as class_2,
       sum(class = 3) as class_3
from t
group by date
order by date;

这在MySQL中使用了一个简写,将布尔表达式视为整数。上面的每个sum()都等同于sum(case when class = 1 then 1 else 0 end)