我有一个类似于此的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做到这一点?我想我需要计算,分组,也许还需要一些加入,但是我不知道该怎么做。
您可以使用条件聚合:
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)。
sum()
sum(case when class = 1 then 1 else 0 end)