一道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查询语句是如何执行的?,感兴趣的朋友可以阅读一下,我用其中的一张图展示查询

图解算法,原理逐步揭开「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,

一条SQL如何被MySQL架构中的各个组件操作执行的?

摘要:一条SQL如何被MySQL架构中的各个组件操作执行的,执行器做了什么?存储引擎做了什么?表关联查询是怎么在存储引擎和执行器被分步执行的?本文带你探探究竟! 本文分享自华为云社区《一条SQL如何被MySQL架构中的各个组件操作执行的?》,作者:砖业洋__。 1. 单表查询SQL在MySQL架构中