【LeetCode】打卡--SQL之176第二高的薪水

【LeetCode】打卡–SQL之176第二高的薪水
题目:
在这里插入图片描述1.自我解答方案

#思路:采用临时表,先把最高工资取出来,然后取出第二高工资
With C1 
AS
    (select Max(Salary) AS Salary 
     from Employee)

SELECT MAX(Salary) AS SecondHighestSalary 
From Employee
Where Salary Not In
                    (Select * 
                     From C1)
##等价于
SELECT MAX(Salary) AS SecondHighestSalary 
From Employee
Where Salary Not In
	(SELECT Max(Salary) AS Salary 
		From Employee)

2.LeetCode平台提供解决方案–LIMIT OFFSET
注意:只有MySQL才有LIMIT方法,MS SQL没有这个方法

思路:采用LIMIT函数跳过第一个
SELECT DISTINCT
    Salary AS SecondHighestSalary
FROM
    Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
#然而,如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,
#因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。
SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary
 #等价于
 SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1, 1) AS SecondHighestSalary
  
 #LIMIT和LIMIT OFFSET区别见我博客

3.LeetCode平台提供解决方案–LIMIT OFFSET + IFNULL

#思路:在LIMIT OFFSET上面结合IFNULL函数来解决Null问题
SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

我们下次再见,如果还有下次的话!!!
欢迎关注微信公众号:516数据工作室
516数据工作室

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值