我有一个类似于这个的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执行此操作?我猜我需要数数,分组,也许有些加入,但我无法弄清楚如何。
答案 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)
。