一道SQL面试题

一道,sql,面试题 · 浏览次数 : 9

小编点评

```sql WITH T_RecurAS ( SELECT Id, 1 AS num, cast(name AS nvarchar(512)) AS src, name AS l1, cast('') AS l2, cast('') AS l3, cast('') AS l4, cast('') AS l5, cast('') AS l6, cast('') AS l7 FROM [TestDB].[dbo].[Recursion] WHERE Pid IS NULL UNION ALL SELECT r.Id, t.num + 1 AS num, cast(t.src + r.Name AS nvarchar(512)) AS src, t.l1, CASE WHEN t.num = 1 THEN r.name WHEN t.num > 1 THEN t.l2 WHEN t.num > 2 THEN t.l3 WHEN t.num > 3 THEN t.l4 WHEN t.num > 4 THEN t.l5 WHEN t.num > 5 THEN t.l6 WHEN t.num > 6 THEN t.l7 END AS l2, CASE WHEN t.num = 2 THEN r.name WHEN t.num > 2 THEN t.l3 WHEN t.num > 3 THEN t.l4 WHEN t.num > 4 THEN t.l5 WHEN t.num > 5 THEN t.l6 WHEN t.num > 6 THEN t.l7 END AS l3, CASE WHEN t.num = 3 THEN r.name WHEN t.num > 3 THEN t.l4 WHEN t.num > 4 THEN t.l5 WHEN t.num > 5 THEN t.l6 WHEN t.num > 6 THEN t.l7 END AS l4, CASE WHEN t.num = 4 THEN r.name WHEN t.num > 4 THEN t.l5 WHEN t.num > 5 THEN t.l6 WHEN t.num > 6 THEN t.l7 END AS l5, CASE WHEN t.num = 5 THEN r.name WHEN t.num > 5 THEN t.l6 WHEN t.num > 6 THEN t.l7 END AS l6, CASE WHEN t.num = 6 THEN r.name WHEN t.num > 6 THEN t.l7 END AS l7 ) SELECT l1 '一级部门', l2 '二级部门', l3 '三级部门', l4 '四级部门', l5 '五级部门', l6 '六级部门', l7 '七级部门' FROM T_Recur; ```

正文

表结构如下

是一张递归格式的表

使用SQL转换成如下格式

SQL实现

使用SQL转换成上图的格式

SQL代码:

WITH T_Recur
AS
(
    SELECT Id,1 num, cast(name as nvarchar(512)) as src 
    , name as l1, cast('' as nvarchar(16)) l2, cast('' as nvarchar(16)) l3, cast('' as nvarchar(16)) l4
    , cast('' as nvarchar(16)) l5, cast('' as nvarchar(16)) l6, cast('' as nvarchar(16)) l7
    FROM [TestDB].[dbo].[Recursion] WHERE Pid is NULL
    UNION all
    SELECT r.Id, t.num+1 num,cast(t.src+r.Name as nvarchar(512)) as src 
    ,t.l1
    ,CASE WHEN t.num=1 THEN r.name 
    when t.num>1 Then t.l2
     ELSE cast('' as nvarchar(16)) END 
    ,CASE WHEN t.num=2 THEN r.name 
    when t.num>2 Then t.l3
    ELSE cast('' as nvarchar(16)) END 
    ,CASE WHEN t.num=3 THEN r.name
    when t.num>3 Then t.l4 
     ELSE cast('' as nvarchar(16)) END 
    ,CASE WHEN t.num=4 THEN r.name
    when t.num>4 Then t.l5
     ELSE cast('' as nvarchar(16)) END 
    ,CASE WHEN t.num=5 THEN r.name
    when t.num>5 Then t.l6
     ELSE cast('' as nvarchar(16)) END 
    ,CASE WHEN t.num=6 THEN r.name
    when t.num>6 Then t.l7 
     ELSE cast('' as nvarchar(16)) END 
    from [TestDB].[dbo].[Recursion] r JOIN T_Recur t on r.PId=t.Id
)

select l1 '一级部门', l2 '二级部门', l3 '三级部门', l4 '四级部门', l5 '五级部门', l6 '六级部门', l7 '七级部门'
from T_Recur  -- 多送三个部门 

结束

我觉得挺离谱的,这是线上的笔试,离开笔试界面会有警告⚠,我就没用开发工具写,相当于是手写SQL了。
我当时没写出来,好久没用case,都用错了。当时case的判断我是用的==,正确写法是单等号=。我当时就随便写了一段case代码和递归SQL,然后说明了一下实现思路用case+cte实现。

与一道SQL面试题相似的内容:

一道SQL面试题

表结构如下 是一张递归格式的表 使用SQL转换成如下格式 SQL实现 使用SQL转换成上图的格式 SQL代码: WITH T_Recur AS ( SELECT Id,1 num, cast(name as nvarchar(512)) as src , name as l1, cast('' as

大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题

大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题 之后会不定期更新每日一题sql系列。 SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合。 1.题目 问题1:如下为某直播平台各主播的开播及关播时间数据明细,现在需要计算该平台最高峰期同时

[转帖]MySQL优化的5个维度

面试官如果问你:你会从哪些维度进行MySQL性能优化?你会怎么回答?所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。我之前写过一条SQL查询语句是如何执行的?,感兴趣的朋友可以阅读一下,我用其中的一张图展示查询

想知道海外技术面试都考些什么吗?

本文主要分享了一位求职者在游戏国际海外数据与发行技术团队面试中的经历,包括一面和二面的详细问题。一面中涉及了算法题、SQL题、项目相关问题以及技术细节的深入探讨,如乐观锁、RabbitMQ、Redis的应用等。二面则更侧重于对项目实施过程的反思、技术方案的选择以及实习时间的确认

图解算法,原理逐步揭开「GitHub 热点速览」

想必每个面过大厂的小伙伴都被考过算法,那么有没有更快了解算法的方式呢?这是一个老项目,hello-algo 用图解的方式让你了解运行原理。此外,SQL 闯关自学项目也是一个让你能好好掌握 SQL 技术的仓库。说回到面试,这个一周获得近 10k star 的 devops-exercises 定能让你好好刷一场面经。

GaussDB技术解读系列之SQL Audit,面向应用开发的SQL审核工具

开发者的技术能力良莠不齐,DBA对数据库知识的局限性导致烂SQL无处不在,而且随着数据库的不断变更或演进,一些好的SQL也可能逐步变成需要优化的烂SQL, 我们要时刻不断地找寻它们的踪迹。

1.数据库的连接、创建会话与模型

SQLAlchemy 是一个强大的 Python 库,它让你可以用一种面向对象的方式来操作数据库(ORM 技术)。 在学习 SQLAlchemy 的过程中,需要一些基础知识的沉淀:Python基础、Python面向对象、MySQL数据库的诸多知识点…… 在此之前,你可能需要了解传统执行SQL语句和使

18.9k star!一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务。

大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(RDBMS)。 DuckDB是一个嵌入式的分析型数据库,它提供了高性能的数据分析和数据处理能力。DuckDB的设计目标是为数据科学家、分析师和数据工程师提供一个快速、灵活且易于使用的数据分析工具。它支持SQL查询语言,并提供了一系列高级

[转帖]一张图看懂 SQL 的各种 join 用法

https://cloud.tencent.com/developer/article/1954012?areaSource=104001.79&traceId=7WZNP412yK3vh7ebw4th0 发布于2022-03-10 13:54:43阅读 870 下图展示了 LEFT JOIN、RI

一次SQL调优 聊一聊 SQLSERVER 数据页

一:背景 1.讲故事 最近给一位朋友做 SQL 慢语句 优化,花了些时间调优,遗憾的是 SQLSERVER 非源码公开,玩起来不是那么顺利,不过从这次经历中我觉得明年的一个重大任务就是好好研究一下它,争取在 SQLSERVER 性能优化上做一些成绩,哈哈! 个人觉得要想深入研究 SQLSERVER,