可以忽略的部分
- 吐槽:SQL的题目在逻辑上并不会特别复杂,但是因为SQL语句只有那么几个函数,而且符号系统相对其他语言比较陌生,导致我们经常不知道如何下手
- 不熟悉sql语句功能的可以先看菜鸟教程
- 总的来说,SQL题目比较偏向于让我们从主要逻辑到实现,到特殊情况判断的逐层分析
三个相关题目
leetcode 176 第二高薪水
- 题目大意:从
Employee
表中选出第二高薪水数额(去掉并列)
- 主要逻辑:第二高如何获取?排序,取第二位
- 实现:如何取第二位?
- 返回的表都是从第一行开始返回的,因此需要使用
offset 1
对返回表进行偏移1位
- 然后去掉后面的所有行,只剩下第二位即可,使用
limit 1
限制返回行数为1,这里再啰嗦一句,limit num
常用于博客之类的网页中,限制一页能显示的帖子。
- 特判:公司员工工资都一样,那么第二高工资就是
null
,因此使用ifnull...null
作为判断。
select ifnull(
(select DISTINCT Salary
from Employee
order by Salary desc
limit 1 offset 1), null
) as SecondHighestSalary;
leetcode 185 部门前三高薪水的所有员工
- 题目描述:有两个表,第一个表是
Employee
,包含四个属性,分别是员工idId
,员工姓名Name
,员工薪水Salary
,和员工所在部门idDepartmentId
, 表如图
第二个表则是部门表,该表很简单,只包含部门id
与部门名称Name
- 逐层分析:
- 返回格式:此题要求返回部门,员工姓名与员工工资,但是
Employee
中没有部门名字,只有部门id