SQL-Implementierung LeetCode (185. Top drei der höchsten Gehälter in der Abteilung)

SQL-Implementierung LeetCode (185. Top drei der höchsten Gehälter in der Abteilung)

[LeetCode] 185. Die drei höchsten Gehälter der Abteilung

Die Mitarbeitertabelle enthält alle Mitarbeiter. Jeder Mitarbeiter hat eine ID und es gibt auch eine Spalte für die Abteilungs-ID.

+----+-------+--------+-----------+
| ID | Name | Gehalt | Abteilungs-ID |
+----+-------+--------+-----------+
| 1 | Thomas | 70000 | 1 |
| 2 | Heinrich | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
+----+-------+--------+-----------+

Die Abteilungstabelle enthält alle Abteilungen des Unternehmens.

+----+----------+
| Ich würde | Name |
+----+----------+
| 1 | ES |
| 2 | Verkauf |
+----+----------+

Schreiben Sie eine SQL-Abfrage, um Mitarbeiter zu finden, die in jeder Abteilung die drei höchsten Gehälter verdienen. Für die obigen Tabellen sollte Ihre SQL-Abfrage die folgenden Zeilen zurückgeben.

+------------+----------+--------+
| Abteilung | Mitarbeiter | Gehalt |
+------------+----------+--------+
| IT | Max | 90000 |
| ES | Randy | 85000 |
| ES | Joe | 70000 |
| Verkauf | Henry | 80000 |
| Verkauf | Sam | 60000 |
+------------+----------+--------+

Diese Frage ist eine Erweiterung der vorherigen Frage zum höchsten Gehalt der Abteilung. Sie ist als schwer gekennzeichnet und ziemlich schwierig. Sie kombiniert die Wissenspunkte vieler vorheriger Fragen. Sehen wir uns zunächst die Methode zur Verwendung von Select Count (Distinct) an. Wir führen die beiden Tabellen „Mitarbeiter“ und „Abteilung“ zusammen und stellen dann fest, dass es nur zwei Gehälter gibt, die höher sind als das aktuelle Gehalt. Dann können die drei höchsten Gehälter abgerufen werden. Siehe den Code unten:

Lösung 1:

SELECT d.Name AS Abteilung, e.Name AS Mitarbeiter, e.Gehalt FROM Mitarbeiter e
JOIN Abteilung d auf e.DepartmentId = d.Id
WHERE (SELECT COUNT(DISTINCT Gehalt) FROM Mitarbeiter WHERE Gehalt > e.Gehalt
UND Abteilungs-ID = d.ID) < 3 ORDER BY d.Name, e.Gehalt DESC;

Die folgende Methode ersetzt <3 in der obigen Methode durch IN (0, 1, 2), was den gleichen Effekt hat:

Lösung 2:

SELECT d.Name AS Abteilung, e.Name AS Mitarbeiter, e.Gehalt FROM Mitarbeiter e, Abteilung d
WHERE (SELECT COUNT(DISTINCT Gehalt) FROM Mitarbeiter WHERE Gehalt > e.Gehalt
UND Abteilungs-ID = d.ID) IN (0, 1, 2) UND e.Abteilungs-ID = d.ID ORDER BY d.Name, e.Gehalt DESC;

Oder wir können hierfür auch das Schlüsselwort Group by Having Count(Distinct ..) verwenden:

Lösung 3:

SELECT d.Name AS Abteilung, e.Name AS Mitarbeiter, e.Gehalt FROM 
(SELECT e1.Name, e1.Gehalt, e1.Abteilungs-ID FROM Mitarbeiter e1 JOIN Mitarbeiter e2 
EIN e1.DepartmentId = e2.DepartmentId UND e1.Gehalt <= e2.Gehalt GRUPPE NACH e1.Id 
HAVING COUNT(DISTINCT e2.Gehalt) <= 3) e JOIN Abteilung d ON e.AbteilungId = d.Id 
ORDER BY d.Name, e.Gehalt DESC;

Die folgende Methode ist etwas komplizierter und verwendet Variablen. Sie ist dieselbe wie die Methode, die in Lösung 3 in fortlaufenden Zahlen verwendet wird. Der Zweck besteht darin, jeder Person entsprechend der Gehaltsstufe einen Rang zuzuweisen und schließlich die Elemente mit einem Rangwert kleiner oder gleich 3 zurückzugeben. Siehe den Code unten:

Lösung 4:

SELECT d.Name AS Abteilung, e.Name AS Mitarbeiter, e.Gehalt FROM 
(WÄHLEN Sie Name, Gehalt, Abteilungs-ID,
@rank := WENN(@pre_d = Abteilungs-ID, @rank + (@pre_s <> Gehalt), 1) ALS Rang,
@pre_d := Abteilungs-ID, @pre_s := Gehalt 
VON Mitarbeiter, (SELECT @pre_d := -1, @pre_s := -1, @rank := 1) AS init
ORDER BY DepartmentId, Gehalt DESC) e JOIN Abteilung d ON e.DepartmentId = d.Id
WO e.rank <= 3 ORDER BY d.Name, e.Salary DESC;

Ähnliche Themen:

Abteilung Höchstes Gehalt

Zweithöchstes Gehalt

Zwei Tabellen kombinieren

Quellen:

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

Dies ist das Ende dieses Artikels über die SQL-Implementierung von LeetCode (185. Die drei höchsten Gehälter in der Abteilung). Weitere verwandte Inhalte zur SQL-Implementierung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • SQL-Implementierung von LeetCode (196. Doppelte Postfächer löschen)
  • SQL-Implementierung von LeetCode (184. Das höchste Gehalt der Abteilung)
  • SQL-Implementierung von LeetCode (183. Kunden, die noch nie eine Bestellung aufgegeben haben)
  • SQL-Implementierung von LeetCode (182. Doppelte Postfächer)
  • SQL-Implementierung von LeetCode (181. Angestellte verdienen mehr als Manager)
  • SQL implementiert LeetCode (180. Fortlaufende Zahlen)
  • C++-Implementierung von LeetCode (179. Maximale Anzahl an Kombinationen)
  • SQL-Implementierung von LeetCode (197. Steigende Temperatur)

<<:  Detaillierte Erklärung der Zusammenhänge zwischen Bildformat und Design im Webdesign

>>:  Legen Sie in der HTML-Tabelle für jede Zelle unterschiedliche Farben und Breiten fest

Artikel empfehlen

So melden Sie sich unter Shell schnell ohne Kennwort bei der MySQL-Datenbank an

Hintergrund Wenn wir uns über den MySQL-Client in...

So setzen Sie das MySQL-Root-Passwort zurück

Inhaltsverzeichnis 1. Ich habe das Root-Passwort ...

Detaillierte Erklärung der Anzeigeeigenschaft im CSS-Beschriftungsmodus

Der Code sieht folgendermaßen aus: <!DOCTYPE h...

Verwendung der JavaScript-Sleep-Funktion

Inhaltsverzeichnis 1. Schlaffunktion 2. setTimeou...

Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen

1. Docker mountet das lokale Verzeichnis Docker k...

CSS3-Eigenschaft line-clamp steuert die Verwendung von Textzeilen

Beschreibung: Begrenzen Sie die Anzahl der Textze...

Wichtige Punkte zum Schreiben von Inhalten für META-Tags in HTML-Webseiten

Das META-Tag ist ein Hilfstag im Kopfbereich der ...

MariaDB-Serverinstallation der MySQL-Reihe

Inhaltsverzeichnis Tutorial-Reihe 1. Installieren...

Die perfekte Lösung für das AutoFill-Problem in Google Chrome

In Google Chrome werden Sie nach der erfolgreiche...