leetcode618.学生地理信息报告

一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章