2022年SQL大厂高频实战面试题(详细解析)

大家好,我是宁一

这篇我们来看看各大厂出的高频实战题~

选择题、问答题可以参考上一篇文章:2022年SQL经典面试题总结(带解析)

实战题相对比较复杂,需要一定的耐心,主要学习解题思路。

一、聚合函数

聚合函数,顾名思义,就是会将数据记录聚合到一起的函数,比如MAX、MIN、SUM、AVG、COUNT,都是将多条记录汇总为一条记录。通常与GROUP BY语句、HAVING语句结合使用。

我们来看看问题:

Employee 员工信息表表包括,每个员工对应的工号 Id,姓名 Name , 工资 Salary 和部门编号 DepartmentId 。

Department 部门信息表包含部门对应的编号ID和部门名称Name。
在这里插入图片描述
编写一个SQL查询,查找 Employee 表中,每个部门重复的工资记录,以及重复的个数。
例如上面示例应返回:

解题思路:通过join函数连接Department表,显示出部门名称,通过GROUP BY 对部门进行分组,使用COUNT聚合函数进行计数,最后通过HAVIGN判断重复的记录。

SELECT 
    de.name,
    em.salary,
    count(*)
FROM Employee em
JOIN Department de
ON em.department_id = de.id
GROUP BY de.name,em.salary
HAVING count(*)>1

二、JOIN连接

  • INNER JOIN: 内连接,也可以只写JOIN。只有进行连接的两个表中都存在与连接标准相匹配的数据才会被保留下来。
  • LEFT JOIN: 左连接,操作符左边表中符合 WHERE 子句的所有记录将会被 返回,操作符右边表中如果没有符合 ON 后面连接条件的记录时,那么从右边表 指定选择的列的值将会是 NULL。
  • RIGHT JOIN: 右连接,会返回右边表所有符合 WHERE 语句的记录。左表 中匹配不上的宇段值用 NULL 代替。
  • FULL JOIN:外连接,返回所有表中符合 WHERE 语句条 件的所有记录。如果任一表的指定宇段没有符合条件的值的话,那么就使用 NULL 替代。

经典问题解析:
编写一个 SQL 查询,查找所有至少连续出现三次的数字,表名为:Num,表结构如下:

解题思路:通过id+1的方式查找id下一次出现的数字,通过id+2的方式查找下下次出现的数字,只要下一次及下下次出现的数字和当前出现的数字相同,即为满足连续出现至少三次的数字。

SELECT DISTINCT a.num
FROM Num a
JOIN Num b
ON a.id+1 = b.id
JOIN Num c
ON a.id+2 = c.id
where a.num = b.num
AND a.num = c.num

结果如下:

三、窗口函数

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值