一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 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
本文介绍了一种使用SQL进行数据透视的技巧,通过row_number()窗口函数对学生地理信息数据进行处理,实现了不同大洲学生的姓名按字母顺序排列的透视表效果。此方法适用于需要将表格数据转换为宽格式数据的场景。

1025

被折叠的 条评论
为什么被折叠?



