题意:
将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况
分解:
- 由将用户划分三个年龄段,知:age<20,age between 20 and 24,age >=25
- 考虑年龄为空,知:age is null
代码
- 法1 if表达式
select device_id,gender,
if(age>=25,'25岁及以上',
if(age<20,'20岁以下',
if(age between 20 and 25,'20-24岁','其他'))) age_cut
from user_profile
- 法2 搜索case函数:
select device_id,gender,
case
when age < 20 then '20岁以下'
when age>=25 then '25岁及以上'
when age between 20 and 25 then '20-24岁'
else '其他'
end age_cut
from user_profile
- 代码3 联合查询(不建议使用):
select u.device_id,u.gender,u.age_cut from (
select id,device_id,gender,'25岁及以上' age_cut from user_profile
where age >=25
union
select id,device_id,gender,'20-24岁' age_cut from user_profile
where age between 20 and 24
union
select id,device_id,gender,'其他' age_cut from user_profile
where age<20 or age is null
order by id ) as u
联合查询为笨方法,慎用,不建议使用
此联合查询中运用了嵌套查询
补充知识点:嵌套查询1(子查询)
-
用于from子句的子查询
select A.id,A.age from ( select * from user)as u
select 查询的结果也是一张表,可以作为出现在from子句后面作为派生表进行查询。
注意点:用于 FROM 的子查询返回的结果相当于一张临时表,所以需要使用 AS 关键字为该临时表起一个名字,不然运行会报错。