select
    device_id,
    gender,
    case
        when age >= 25 then '25岁及以上'
        when age >= 20 then '20-24岁'
        when age < 20 then '20岁及以下'
        else '其他'
    end as age_cut
from user_profile

1. 选择字段

sql

SELECT
    device_id,    -- 用户设备ID
    gender,       -- 用户性别
    CASE ...      -- 根据年龄计算的年龄段分类(重点)

  • device_id:用户设备的唯一标识符。
  • gender:用户性别(如 male 或 female)。
  • CASE 表达式:动态生成年龄段分类,逻辑如下:

2. 年龄段划分逻辑

sql

CASE
    WHEN age >= 25 THEN '25岁及以上'    -- 年龄≥25
    WHEN age >= 20 THEN '20-24岁'       -- 20≤年龄≤24
    WHEN age < 20 THEN '20岁以下'       -- 年龄<20
    ELSE '其他'                         -- 年龄为NULL或非法值
END AS age_cut

  • 执行顺序:先检查 age >= 25,满足则归为 “25 岁及以上”。否则检查 age >= 20(此时隐含 age < 25),归为 “20-24 岁”。再检查 age < 20,归为 “20 岁以下”。若以上条件均不满足(如 age 为 NULL),归为 “其他”。
  • 关键点:条件顺序很重要:若先判断 age >= 20,则 age=25 会被错误归为 “20-24 岁”。处理 NULL 值:age 为 NULL 时,所有 WHEN 条件均不成立,触发 ELSE。

3. 数据源

sql

FROM user_profile
  • 从 user_profile 表中查询数据,该表应包含 device_idgender 和 age 字段。