【SQL每日一练】查询“OCCUPATIONS”中的“Occupation”列并按Doctor、Professor、Singer、Actor列输出

文章目录


题目

查询"OCCUPATIONS"中的"Occupation"列,使每个姓名按字母顺序排序,并显示在其相应的"职业》下方。输出列标题应分别为Doctor、Professor、Singer和Actor。

注意:当不再有与某个职业对应的名称时,打印NULL。
输入格式

职业表描述如下:

职业只包含以下值之一:博士、教授、歌手或演员。

样本输入

样本输出

复制代码
Jenny    Ashley     Meera  Jane
Samantha Christeen  Priya  Julia
NULL     Ketty      NULL   Maria

一、分析

以SqlServer为例:

1.输出列标题应分别为Doctor、Professor、Singer和Actor

可以使用Pivot把行转为列:Pivot (max(name) for Occupation in ([Doctor],[Professor],[Singer], [Actor])) as b

2、使每个姓名按字母顺序排序,通过窗口函数进行排序row_number() over(PARTITION by Occupation order by name)

二、题解

1.SqlServer

代码如下(示例):

c 复制代码
select Doctor,Professor,Singer, Actor from (select Occupation,Name, row_number() over(PARTITION by Occupation order by name)  rom
from OCCUPATIONS ) as a 
Pivot (max(name) for Occupation in ([Doctor],[Professor],[Singer], [Actor])) as b

2.MySQL

代码如下(示例):

c 复制代码
SELECT MAX(C1), MAX(C2), MAX(C3), MAX(C4) FROM
(SELECT
COUNT(*) Rank,
IF (STRCMP(T1.Occupation, 'Doctor') = 0, T1.Name, NULL) AS C1,
IF (STRCMP(T1.Occupation, 'Professor') = 0, T1.Name, NULL) AS C2,
IF (STRCMP(T1.Occupation, 'Singer') = 0, T1.Name, NULL) AS C3,
IF (STRCMP(T1.Occupation, 'Actor ') = 0, T1.Name, NULL) AS C4
FROM Occupations T1 LEFT JOIN Occupations T2 ON T1.Occupation = T2.Occupation AND STRCMP(T1.Name, T2.Name) >= 0 GROUP BY T1.Name, T1.Occupation ORDER BY Rank, T1.Name) AS MyOccupations GROUP BY Rank;

3.Oracle

代码如下(示例):

复制代码
WITH D AS (SELECT NAME, ROWNUM R FROM (SELECT NAME FROM OCCUPATIONS WHERE OCCUPATION='Doctor' ORDER BY 1)),
     P AS (SELECT NAME, ROWNUM R FROM (SELECT NAME FROM OCCUPATIONS WHERE OCCUPATION='Professor' ORDER BY 1)),
     S AS (SELECT NAME, ROWNUM R FROM (SELECT NAME FROM OCCUPATIONS WHERE OCCUPATION='Singer' ORDER BY 1)),
     A AS (SELECT NAME, ROWNUM R FROM (SELECT NAME FROM OCCUPATIONS WHERE OCCUPATION='Actor' ORDER BY 1))
SELECT D.NAME,P.NAME,S.NAME,A.NAME
FROM 
  A FULL OUTER JOIN D ON A.R=D.R  
    FULL OUTER JOIN S ON A.R=S.R
    FULL OUTER JOIN P ON A.R=P.R;

总结

题目有很多种解法,上面只是其中三种解法,各位博主有其他解法欢迎分享!!!

相关推荐
新法国菜44 分钟前
MySql知识梳理之DML语句
数据库·mysql
老华带你飞1 小时前
校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园交友网站
许泽宇的技术分享1 小时前
Text2API与Text2SQL深度对比:自然语言驱动的数据交互革命
数据库·windows·microsoft
两张不够花4 小时前
Shell脚本源码安装Redis、MySQL、Mongodb、PostgreSQL(无报错版)
linux·数据库·redis·mysql·mongodb·postgresql·云计算
Java 码农4 小时前
nodejs 集成mongodb实现增删改查
数据库·mongodb
少陵野小Tommy5 小时前
Python能用古诗词数据库做什么7:根据标题、诗句查找诗歌
开发语言·数据库·python
khystal7 小时前
HUMS 2023齿轮箱数据分析
数据库·数据分析·信号处理
Warren987 小时前
Spring Boot 整合网易163邮箱发送邮件实现找回密码功能
数据库·vue.js·spring boot·redis·后端·python·spring
追逐时光者7 小时前
推荐 4 个不错的数据库设计工具,效率提升利器!
数据库
.Shu.9 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【五、InnoDB 高阶机制与实战调优】
数据库·mysql