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_id
、gender
和age
字段。