【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;

总结

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

相关推荐
可涵不会debug7 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom7 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*7 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰7 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*7 小时前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
-Xie-8 小时前
Mysql杂志(十六)——缓存池
数据库·mysql·缓存
七夜zippoe8 小时前
缓存与数据库一致性实战手册:从故障修复到架构演进
数据库·缓存·架构
一个天蝎座 白勺 程序猿8 小时前
Apache IoTDB(5):深度解析时序数据库 IoTDB 在 AINode 模式单机和集群的部署与实践
数据库·apache·时序数据库·iotdb·ainode
QQ3596773459 小时前
ArcGIS Pro实现基于 Excel 表格批量创建标准地理数据库(GDB)——高效数据库建库解决方案
数据库·arcgis·excel