第二高的薪水(排序问题)
176. 第二高的薪水
难度简单
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
思考: 显然,这是一个排序问题!!
sql语句的问题,就是不存在第二高的薪水时,没有返回null,怎么返回呢?
select Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1
正确的代码:
select (select distinct Salary from Employee order by Salary desc limit 1,1) as SecondHighestSalary
注意一下几点:
1) 如果值不存在怎么返回null, select null 返回null
2) distinct的作用,如果没有distinct那么sql语句是错误的,因为可能会有多个相同的薪水都是第一高,那么输出就会报错。
distinct的作用: 一般用 distinct来查询某个字段不重复的记录数,distinct要放在字段的开头。只会得到不重复的某个字段,
好好体会一下distinct 和 group by的区别!!!! ( distinct 只是得到某个字段,group by 得到的是整条记录 )
此外,desc表示的是降序排序, asc是升序排序 limit 1,1 limit表示从第几位开始(从0开始),取多少个数。
参考文档:
distinct: https://www.cnblogs.com/shiluoliming/p/6604407.html
也许会有遗憾,但是不应该在失败之前
浙公网安备 33010602011771号