一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 student 表中。
| name | continent |
|--------|-----------|
| Jack | America |
| Pascal | Europe |
| Xi | Asia |
| Jane | America |
写一个查询语句实现对大洲(continent)列的 透视表 操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面。输出的标题应依次为美洲(America)、亚洲(Asia)和欧洲(Europe)。数据保证来自美洲的学生不少于来自亚洲或者欧洲的学生。
对于样例输入,它的对应输出是:
| America | Asia | Europe |
|---------|------|--------|
| Jack | Xi | Pascal |
| Jane | | |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/students-report-by-geography
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
1.新增1列,给3个洲的学生分别按照姓名顺序排名,使用row_number() over (order by ) 函数,这样有3个表
2.将3个表按照排名列联接起来
代码
select America, Asia, Europe
from
(select name as America,row_number() over (order by name ASC) as rn from student where continent='America') a
left join
(select name as Asia,row_number() over (order by name ASC) as rn from student where continent='Asia') b
on a.rn=b.rn
left join
(select name as Europe,row_number() over (order by name ASC) as rn from student where continent='Europe') c
on c.rn=a.rn