中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL中怎么利用LeetCode求第N高薪水

發布時間:2021-08-03 18:00:10 來源:億速云 閱讀:119 作者:Leah 欄目:開發技術

SQL中怎么利用LeetCode求第N高薪水,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

[LeetCode] 177.Nth Highest Salary 第N高薪水

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

+----+--------+
| 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.

這道題是之前那道Second Highest Salary的拓展,根據之前那道題的做法,我們可以很容易的將其推展為N,根據對Second Highest Salary中解法一的分析,我們只需要將OFFSET后面的1改為N-1就行了,但是這樣MySQL會報錯,估計不支持運算,那么我們可以在前面加一個SET N = N - 1,將N先變成N-1再做也是一樣的:

解法一:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N - 1;
  RETURN (
      SELECT DISTINCT Salary FROM Employee GROUP BY Salary
      ORDER BY Salary DESC LIMIT 1 OFFSET N
  );
END

根據對Second Highest Salary中解法四的分析,我們只需要將其1改為N-1即可,這里卻支持N-1的計算,參見代碼如下:

解法二:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      SELECT MAX(Salary) FROM Employee E1
      WHERE N - 1 =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
      WHERE E2.Salary > E1.Salary)
  );
END

當然我們也可以通過將最后的>改為>=,這樣我們就可以將N-1換成N了:

解法三:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      SELECT MAX(Salary) FROM Employee E1
      WHERE N =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
      WHERE E2.Salary >= E1.Salary)
  );
END

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞安市| 扎鲁特旗| 合山市| 白沙| 朔州市| 宁陵县| 通渭县| 高阳县| 荥阳市| 揭西县| 石首市| 彰武县| 静宁县| 内乡县| 墨江| 廊坊市| 从江县| 津市市| 体育| 临湘市| 邛崃市| 太和县| 兴安县| 无极县| 漯河市| 南岸区| 增城市| 石屏县| 黄陵县| 剑川县| 仁化县| 东台市| 克什克腾旗| 潞西市| 荥阳市| 汪清县| 伊宁市| 始兴县| 商都县| 望谟县| 商河县|