濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)

SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)

熱門(mén)標(biāo)簽:400電話(huà)可以辦理嗎 高清地圖標(biāo)注道路 大眾點(diǎn)評(píng)星級(jí)酒店地圖標(biāo)注 云南電商智能外呼系統(tǒng)價(jià)格 話(huà)務(wù)外呼系統(tǒng)怎么樣 智能外呼系統(tǒng)復(fù)位 臨清電話(huà)機(jī)器人 外東北地圖標(biāo)注 拉卡拉外呼系統(tǒng)

[LeetCode] 176.Second Highest Salary 第二高薪水

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

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

For example, given the above Employee table, the second highest salary is 200. If there is no second highest salary, then the query should return null.

這道題讓我們找表中某列第二大的數(shù),這道題有很多種解法,先來(lái)看一種使用Limit和Offset兩個(gè)關(guān)鍵字的解法,MySQL中Limit后面的數(shù)字限制了我們返回?cái)?shù)據(jù)的個(gè)數(shù),Offset是偏移量,那么如果我們想找第二高薪水,我們首先可以先對(duì)薪水進(jìn)行降序排列,然后我們將Offset設(shè)為1,那么就是從第二個(gè)開(kāi)始,也就是第二高薪水,然后我們將Limit設(shè)為1,就是只取出第二高薪水,如果將Limit設(shè)為2,那么就將第二高和第三高薪水都取出來(lái):

解法一:

SELECT Salary FROM Employee GROUP BY Salary
UNION ALL (SELECT NULL AS Salary)
ORDER BY Salary DESC LIMIT 1 OFFSET 1;

我們也可以使用Max函數(shù)來(lái)做,這個(gè)返回最大值,邏輯是我們?nèi)〕龅牟话畲笾档臄?shù)字中的最大值,即為第二大值:

解法二:

SELECT MAX(Salary) FROM Employee 
WHERE Salary NOT IN
(SELECT MAX(Salary) FROM Employee);

下面這種方法和上面基本一樣,就是用小于號(hào)代替了Not in關(guān)鍵字,效果相同:

解法三:

SELECT MAX(Salary) FROM Employee
Where Salary 
(SELECT MAX(Salary) FROM Employee);

最后來(lái)看一種可以擴(kuò)展到找到第N高的薪水的方法,只要將下面語(yǔ)句中的1改為N-1即可,第二高的薪水帶入N-1就是1,下面語(yǔ)句的邏輯是,假如我們要找第二高的薪水,那么我們?cè)试S其中一個(gè)最大值存在,然后在其余的數(shù)字中找出最大的,即為整個(gè)的第二大的值;

解法四:

SELECT MAX(Salary) FROM Employee E1
WHERE 1 =
(SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2
WHERE E2.Salary > E1.Salary);

參考資料:

https://leetcode.com/discuss/47041/very-very-simple-solution

https://leetcode.com/discuss/42849/general-solution-not-using-max

https://leetcode.com/discuss/21751/simple-query-which-handles-the-null-situation

到此這篇關(guān)于SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)的文章就介紹到這了,更多相關(guān)SQL實(shí)現(xiàn)第二高薪水內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • SQL實(shí)現(xiàn)LeetCode(184.系里最高薪水)
  • SQL實(shí)現(xiàn)LeetCode(183.從未下單訂購(gòu)的顧客)
  • SQL實(shí)現(xiàn)LeetCode(182.重復(fù)的郵箱)
  • SQL實(shí)現(xiàn)LeetCode(181.員工掙得比經(jīng)理多)
  • SQL實(shí)現(xiàn)LeetCode(180.連續(xù)的數(shù)字)
  • SQL實(shí)現(xiàn)LeetCode(178.分?jǐn)?shù)排行)
  • SQL實(shí)現(xiàn)LeetCode(177.第N高薪水)
  • SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)

標(biāo)簽:溫州 福州 定西 三明 山西 無(wú)錫 阿里 揚(yáng)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)》,本文關(guān)鍵詞  SQL,實(shí)現(xiàn),LeetCode,176.,第二,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    凤翔县| 光泽县| 孟津县| 和政县| 商丘市| 四子王旗| 钦州市| 辉县市| 衡阳市| 元氏县| 固安县| 无棣县| 台湾省| 卢湾区| 和平区| 杨浦区| 贵港市| 九江市| 衡东县| 武义县| 盈江县| 水城县| 门头沟区| 江源县| 句容市| 乌苏市| 固原市| 呈贡县| 肥东县| 南皮县| 独山县| 比如县| 雅安市| 塘沽区| 电白县| 满洲里市| 都江堰市| 涞水县| 包头市| 茶陵县| 民丰县|