学生地理信息报告

一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下 student 表中。

| name   | continent |
|--------|-----------|
| Jack   | America   |
| Pascal | Europe    |
| Xi     | Asia      |
| Jane   | America   |



写一个查询语句实现对大洲(continent)列的 透视表 操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面。输出的标题应依次为美洲(America)、亚洲(Asia)和欧洲(Europe)。数据保证来自美洲的学生不少于来自亚洲或者欧洲的学生。


对于样例输入,它的对应输出是:

| America | Asia | Europe |
|---------|------|--------|
| Jack    | Xi   | Pascal |
| Jane    |      |        |

#建表

DROP TABLE IF EXISTS student;CREATE TABLE student
(NAME VARCHAR(20),
continent VARCHAR(20)
);INSERT INTO student VALUES('Jack', 'America');
INSERT INTO student VALUES('Pascal', 'Europe');
INSERT INTO student VALUES('Xi', 'Asia');
INSERT INTO student VALUES('Jane', 'America');

#答案

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

#展示
在这里插入图片描述

#本人错误代码

SELECT
(CASE WHEN s.continent='America' THEN s.name ELSE NULL END) 'America',
(CASE WHEN s.continent='Asia' THEN s.name ELSE NULL END) 'Asia',
(CASE WHEN s.continent='Europe' THEN s.name ELSE NULL END) 'Europe'
FROM student s;

#展示

在这里插入图片描述

本题一看,很简单,建表也很简单 但是细细一品真的不容易。
虽然知道使用开窗函数 但是没想到连接 导致这个空值没办法去掉
sql语句还是掌握不够扎实。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忘川之水&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值