【场景】:每个--最低(高)-- 【分类】:窗口函数、分组函数、表连接
分析思路
难点: 1.如何取出使用分组函数之后得不到的device_id?连接其他表或者使用排序函数
(1)统计每个学校的最低gpa
- [使用]:min
(2)取出每个学校gpa最低的同学的device_id
- [使用]:join
最终结果
select 查询结果 [用户号;学校;gpa]
from 从哪张表中查询数据[多表]
order by 对查询结果排序 [学校];
求解代码
方法一:
with子句 + 一步步拆解
with
temp as(
#对每个学校的gpa排序
select distinct
device_id,
university,
row_number() over(partition by university order by gpa) as ranking,
min(gpa) over(partition by university order by gpa) as gpa
from user_profile
order by university
)
#取出每个学校gpa最低的同学的device_id
select
device_id,
university,
gpa
from temp
where ranking = 1
方法二:
表连接
select
u.device_id,
u.university,
u.gpa
from user_profile u
join(
#统计每个学校的最低gpa
select
university,
min(gpa) as gpa
from user_profile
group by university
) as attr on u.university = attr.university and u.gpa = attr.gpa
order by university
方法三:
子查询
select
device_id,
university,
gpa
from user_profile
where (university,gpa) in(
#统计每个学校的最低gpa
select
university,
min(gpa) as gpa
from user_profile
group by university
)
order by university