【SQL刷題系列】:leetcode177 Nth Highest Salary

SQL刷題系列:SQL作爲一種數據庫查詢和程序設計語言,是從事數據技術人員必備的技能,也是各大公司的數據分析、數據挖掘、數據庫等筆試題必考的一種題。所以,不論大家是轉行還是學習都少不了這一關。爲此,Python數據科學開啓了SQL刷題的系列,希望可以幫助有需要的朋友們。 題目來源:本篇內容爲Leetcode上SQL題庫177 難易程度:中等

▌刷題回顧

【SQL刷題系列】:leetcode178 Rank Scores

【SQL刷題系列】:leetcode183 Customers Who Never Order

【SQL刷題系列】:leetcode180 Consecutive Numbers

▌題目描述

Write a SQL query to get the nth highest salary from the Employee table.

寫一段SQL查詢語句,以得到Employee表中第n個高的工資。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.

例如,給定以上Employee表,第2高的工資就是200。如果沒找到第n個高的公司,查詢需要返回null。

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

▌參考答案

題中已經寫好了一個函數,我們需要將查詢的SQL語句寫在註釋下面,然後返回結果。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      # Write your MySQL query statement below.

  );
END

參考1:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT DISTINCT Salary
      FROM Employee
      ORDER BY Salary DESC LIMIT M, 1
      );
END

▌答案解析

參考1

查找第n高的工資,我們很自然的想到了LIMIT的用法。

LIMIT X,Y含義:X表示跳過X個數據,Y表示選取Y個數據。

或者使用 LIMIT Y OFFSET X,也是一樣的效果。

如果想要得到第n高的工資,那麼就需要跳過前面n-1個數據。因此,我們直接寫成下面這樣:

SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC LIMIT N-1, 1

但是這樣寫是有語法錯誤的,SQL語句無法執行。因此我們繞過這種錯誤寫法,而在前面定義一個新的變量M,它的值爲N-1,這樣就可以完美解決了。

DECLARE M INT;
SET M=N-1;

所以,最終的完整代碼如下:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT DISTINCT Salary
      FROM Employee
      ORDER BY Salary DESC LIMIT M, 1
      );
END
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章