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列,因为是按年龄范围统计)