[LeetCode] 185. Die drei höchsten Gehälter der AbteilungDie Mitarbeitertabelle enthält alle Mitarbeiter. Jeder Mitarbeiter hat eine ID und es gibt auch eine Spalte für die Abteilungs-ID.
Die Abteilungstabelle enthält alle Abteilungen des Unternehmens.
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.
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:
|
<<: 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
Ausführung der Hauptbibliothek DATENBANK ERSTELLE...
Hintergrund Wenn wir uns über den MySQL-Client in...
Installieren Sie Virtualisierungssoftware Bevor S...
Inhaltsverzeichnis 1. Ich habe das Root-Passwort ...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...
Fügen Sie der Seite einen DOCTYPE hinzu Da versch...
Inhaltsverzeichnis 1. Schlaffunktion 2. setTimeou...
1. Docker mountet das lokale Verzeichnis Docker k...
Beschreibung: Begrenzen Sie die Anzahl der Textze...
Das META-Tag ist ein Hilfstag im Kopfbereich der ...
Inhaltsverzeichnis Problembeschreibung Prinzipana...
Inhaltsverzeichnis Tutorial-Reihe 1. Installieren...
Inhaltsverzeichnis Same-Origin-Richtlinie Ajax-An...
In Google Chrome werden Sie nach der erfolgreiche...
In diesem Artikel werden die spezifischen Schritt...