【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数据工作室

猜你喜欢

转载自blog.csdn.net/Asher117/article/details/88686467