题目描述
一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 student 表中
写一个查询语句实现对大洲(continent)列的 透视表 操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面。输出的标题应依次为美洲(America)、亚洲(Asia)和欧洲(Europe)。数据保证来自美洲的学生不少于来自亚洲或者欧洲的学生。
输出
正确答案
select MIN(case when continent = 'America' then name else null end) America,
MIN(case when continent = 'Asia' then name else null end) Asia,
MIN(case when continent = 'Europe' then name else null end) Europe
from (select name, continent,
row_number()over(partition by continent order by name) cur_rank
from student)t
group by cur_rank
思路
- 内层使用窗口函数将每个洲的学生根据name排序。
- 外层每一行通过内层排序聚合,每一列通过case when 选出各州的学生。
- 这里min只是一个聚合,因为每个州每个排序值只有一个学生对应,所以用min或者是用max,结果都一样。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/students-report-by-geography