# 现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
select device_id,university,gpa
from (
select device_id,university,gpa,row_number() over(partition by university order by gpa )as t
from user_profile)s
where s.t=1
order by university;
首先先说一下我的思路,很明显要按照university进行分组的,如果不加上device_id的话,结果就很简单类似下面的代码
select university,min(gpa)
from user_profile
group by university
order by university;
但是这里需要加上device_id,这样的话也必须在group by之后加上device_id字段,那min(gpa)就没多大含义,因为按照device_id和university进行分组之后gpa结果也就有多个。基于这种情况就采用窗口函数来按照university进行分组,再对这些gpa进行升序排序,然后取每个结果的第一条就行了,最后也就形成了开头代码块所展示的结果了。