SELECT temp.age_cut, SUM(`number`) AS 'number' FROM ( SELECT IF (age >= 25, '25岁及以上', '25岁以下') AS age_cut, IF ( ( age <= 25 OR age IS NULL ), COUNT(*), COUNT(age) ) AS 'number' FROM user_profile GROUP BY age ) temp GROUP BY age_cut
将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量,age为null 也记为 25岁以下
题解思路:
1.首先按照age分组,查询出各age分别有多少人。
注意:IF((age<=25 OR age IS NULL),COUNT(*),COUNT(age))
,使用COUNT(*)
是因为当age=NULL需要统计为年龄小于25,这里不能使用COUNT(age)
,count(列)函数不会统计列值为NULL的记录。
2.再列出当前年龄属于哪个年龄范围:IF (age >= 25, '25岁及以上', '25岁以下') AS age_cut
3.将上表作为一个临时表temp,按年龄范围分组,使用SUM函数统计出各年龄段的总人数。(注意需要删除age列,因为是按年龄范围统计)