一所美國大學有來自亞洲、歐洲和美洲的學生,他們的地理信息存放在如下 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