最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)

 更新時(shí)間:2021年08月04日 15:33:01   作者:Grandyang  
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 185.Department Top Three Salaries 系里前三高薪水

The Employee table holds all employees. Every employee has an Id, and there is also a column for the department Id.

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Henry | 80000  | 2            |
| 3  | Sam   | 60000  | 2            |
| 4  | Max   | 90000  | 1            |
| 5  | Janet | 69000  | 1            |
| 6  | Randy | 85000  | 1            |
+----+-------+--------+--------------+

The Department table holds all departments of the company.

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

Write a SQL query to find employees who earn the top three salaries in each of the department. For the above tables, your SQL query should return the following rows.

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Randy    | 85000  |
| IT         | Joe      | 70000  |
| Sales      | Henry    | 80000  |
| Sales      | Sam      | 60000  |
+------------+----------+--------+

這道題是之前那道Department Highest Salary的拓展,難度標(biāo)記為Hard,還是蠻有難度的一道題,綜合了前面很多題的知識(shí)點(diǎn),首先看使用Select Count(Distinct)的方法,我們內(nèi)交Employee和Department兩張表,然后我們找出比當(dāng)前薪水高的最多只能有兩個(gè),那么前三高的都能被取出來了,參見代碼如下:

解法一:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM Employee e
JOIN Department d on e.DepartmentId = d.Id
WHERE (SELECT COUNT(DISTINCT Salary) FROM Employee WHERE Salary > e.Salary
AND DepartmentId = d.Id) < 3 ORDER BY d.Name, e.Salary DESC;

下面這種方法將上面方法中的<3換成了IN (0, 1, 2),是一樣的效果:

解法二:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM Employee e, Department d
WHERE (SELECT COUNT(DISTINCT Salary) FROM Employee WHERE Salary > e.Salary
AND DepartmentId = d.Id) IN (0, 1, 2) AND e.DepartmentId = d.Id ORDER BY d.Name, e.Salary DESC;

或者我們也可以使用Group by Having Count(Distinct ..) 關(guān)鍵字來做:

解法三:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM 
(SELECT e1.Name, e1.Salary, e1.DepartmentId FROM Employee e1 JOIN Employee e2 
ON e1.DepartmentId = e2.DepartmentId AND e1.Salary <= e2.Salary GROUP BY e1.Id 
HAVING COUNT(DISTINCT e2.Salary) <= 3) e JOIN Department d ON e.DepartmentId = d.Id 
ORDER BY d.Name, e.Salary DESC;

下面這種方法略微復(fù)雜一些,用到了變量,跟Consecutive Numbers中的解法三使用的方法一樣,目的是為了給每個(gè)人都按照薪水的高低增加一個(gè)rank,最后返回rank值小于等于3的項(xiàng)即可,參見代碼如下:

解法四:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM 
(SELECT Name, Salary, DepartmentId,
@rank := IF(@pre_d = DepartmentId, @rank + (@pre_s <> Salary), 1) AS rank,
@pre_d := DepartmentId, @pre_s := Salary 
FROM Employee, (SELECT @pre_d := -1, @pre_s := -1, @rank := 1) AS init
ORDER BY DepartmentId, Salary DESC) e JOIN Department d ON e.DepartmentId = d.Id
WHERE e.rank <= 3 ORDER BY d.Name, e.Salary DESC;

類似題目:

Department Highest Salary

Second Highest Salary

Combine Two Tables

參考資料:

https://leetcode.com/discuss/23002/my-tidy-solution

https://leetcode.com/discuss/91087/yet-another-solution-using-having-count-distinct

https://leetcode.com/discuss/69880/two-solutions-1-count-join-2-three-variables-join

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

相關(guān)文章

  • MySQL5.1主從同步出現(xiàn)Relay log read failure錯(cuò)誤解決方法

    MySQL5.1主從同步出現(xiàn)Relay log read failure錯(cuò)誤解決方法

    這篇文章主要介紹了MySQL5.1主從同步出現(xiàn)Relay log read failure錯(cuò)誤解決方法,需要的朋友可以參考下
    2014-07-07
  • mysql日期date型和int型互換的方法

    mysql日期date型和int型互換的方法

    下面小編就為大家?guī)硪黄猰ysql日期date型和int型互換的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)

    Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)

    這篇文章主要介紹了Mysql插入數(shù)據(jù)方式(insert into 、replace into解析),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 淺談mysql數(shù)據(jù)庫事物隔離級(jí)別

    淺談mysql數(shù)據(jù)庫事物隔離級(jí)別

    本文主要介紹了淺談mysql數(shù)據(jù)庫事物隔離級(jí)別,數(shù)據(jù)庫事務(wù)的隔離級(jí)別有4個(gè),這四個(gè)級(jí)別可以逐個(gè)解決臟讀 、不可重復(fù)讀 、幻讀這幾類問題,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2023-05-05
  • Datagrip2020下載MySQL驅(qū)動(dòng)失敗的問題

    Datagrip2020下載MySQL驅(qū)動(dòng)失敗的問題

    這篇文章主要介紹了Datagrip2020下載MySQL驅(qū)動(dòng)失敗的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法

    內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法

    本文介紹了“內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法”,需要的朋友可以參考一下
    2013-03-03
  • mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程

    mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程,我們都知道數(shù)據(jù)是無價(jià),如果不對數(shù)據(jù)進(jìn)行備份,相當(dāng)是讓數(shù)據(jù)在裸跑,一旦服務(wù)器出問題,只有哭的份了,需要的朋友可以參考下
    2023-07-07
  • MySQL統(tǒng)計(jì)時(shí)間差的平均值方式

    MySQL統(tǒng)計(jì)時(shí)間差的平均值方式

    這篇文章主要介紹了MySQL統(tǒng)計(jì)時(shí)間差的平均值方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mysql數(shù)據(jù)備份與恢復(fù)實(shí)現(xiàn)方法分析

    mysql數(shù)據(jù)備份與恢復(fù)實(shí)現(xiàn)方法分析

    這篇文章主要介紹了mysql數(shù)據(jù)備份與恢復(fù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)備份與恢復(fù)常見實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • MySql約束超詳細(xì)介紹

    MySql約束超詳細(xì)介紹

    MySQL唯一約束(Unique?Key)是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為?id?字段加上唯一性約束后,每條記錄的?id?值都是唯一的,不能出現(xiàn)重復(fù)的情況
    2022-09-09

最新評(píng)論

洪洞县| 兴义市| 苍山县| 富源县| 安宁市| 即墨市| 漯河市| 义乌市| 枞阳县| 佛坪县| 甘泉县| 北碚区| 玉林市| 讷河市| 青龙| 曲松县| 济阳县| 古交市| 桃园县| 措美县| 高雄县| 舒城县| 丰都县| 禄丰县| 昭通市| 建始县| 镇沅| 广东省| 长寿区| 和政县| 当阳市| 同心县| 武强县| 天祝| 阿图什市| 德庆县| 西城区| 深圳市| 新泰市| 峨眉山市| 巴塘县|