小编典典

SQL计数和组

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做到这一点?我想我需要计算,分组,也许还需要一些加入,但是我不知道该怎么做。


阅读 178

收藏
2021-04-14

共1个答案

小编典典

您可以使用条件聚合:

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)

2021-04-14