题目解析

题目描述

运营团队希望将用户按照年龄划分为两个年龄段:25岁以下25岁及以上。同时,需要统计每个年龄段的用户数量。需要注意的是,年龄(age)为 NULL 的用户也应被归类为25岁以下

SQL 代码

-- 选择并划分年龄段,统计每个年龄段的用户数量
SELECT 
    CASE 
        WHEN age < 25 OR age IS NULL THEN '25岁以下'
        ELSE '25岁及以上'
    END AS age_cut,
    COUNT(*) AS number
FROM 
    user_profile
GROUP BY 
    age_cut
ORDER BY 
    CASE 
        WHEN age_cut = '25岁以下' THEN 1
        ELSE 2
    END;

代码解释

  • SELECT 子句

    • 使用 CASE WHEN 语句来判断 age 字段:
      • 如果 age 小于25岁或为 NULL,则将其归类为 '25岁以下'
      • 否则,归类为 '25岁及以上'
    • 为划分后的结果命名为 age_cut
    • 使用 COUNT(*) 统计每个年龄段的用户数量,并命名为 number
  • FROM 子句

    • 指定数据来源为 user_profile 表。
  • GROUP BY 子句

    • 按照划分后的 age_cut 进行分组,以便统计每个组的用户数量。
  • ORDER BY 子句

    • 根据需求,将 '25岁以下' 的结果排在前面,'25岁及以上' 的结果排在后面。
    • 通过 CASE WHEN 语句实现自定义排序。