SQL-Implementierung von LeetCode (178. Punkterangliste)

SQL-Implementierung von LeetCode (178. Punkterangliste)

[LeetCode] 178.Ranglistenergebnisse

Schreiben Sie eine SQL-Abfrage, um die Punktzahlen zu bewerten. Wenn zwischen zwei Punktzahlen ein Gleichstand besteht, sollten beide die gleiche Rangfolge haben. Beachten Sie, dass nach einem Gleichstand die nächste Rangnummer der nächste aufeinanderfolgende ganzzahlige Wert sein sollte. Mit anderen Worten, es sollten keine „Lücken“ zwischen den Rängen vorhanden sein.

+----+--------+
| ID | Punktzahl |
+----+--------+
| 1 | 3,50 |
| 2 | 3,65 |
| 3 | 4,00 |
| 4 | 3,85 |
| 5 | 4,00 |
| 6 | 3,65 |
+----+--------+

Beispielsweise sollte Ihre Abfrage anhand der obigen Punktetabelle den folgenden Bericht generieren (sortiert nach dem höchsten Punktestand):

+----------+------+
| Punktzahl | Rang |
+----------+------+
| 4,00 | 1 |
| 4,00 | 1 |
| 3,85 | 2 |
| 3,65 | 3 |
| 3,65 | 3 |
| 3,50 | 4 |
+----------+------+

Diese Frage gibt uns eine Punktetabelle und fordert uns auf, die Punkte zu sortieren. Die Voraussetzung ist, dass die gleichen Punkte im gleichen Rang stehen und der nächste Punkt im nächsten aufeinanderfolgenden Rang steht und dass dazwischen keine leeren Zahlen stehen dürfen. Ich habe diese Frage vollständig gemäß dem Beitrag von Stephen geschrieben. Ich bete den großen Gott an ... Der große Gott hat vier Methoden zusammengefasst, also lasst uns eine nach der anderen anbeten und lernen. Schauen wir uns zuerst die erste Lösung an. Die Idee zur Lösung des Problems besteht darin, herauszufinden, wie viele verschiedene Punkte in der Tabelle größer oder gleich jedem Punkt sind, und sie dann in absteigender Reihenfolge anzuordnen. Siehe den Code wie folgt:

Lösung 1:

SELECT-Score, 
(SELECT COUNT(DISTINCT Score) FROM Scores WHERE Score >= s.Score) Rang 
VON Punktzahlen s ORDER BY Punktzahl DESC;

Die Lösung ist die gleiche wie oben, aber die Schreibmethode ist etwas anders:

Lösung 2:

SELECT-Score,
(SELECT COUNT(*) FROM (SELECT DISTINCT Score s FROM Scores) t WHERE s >= Score) Rang
VON Scores ORDER BY Score DESC;

Die folgende Lösung verwendet Inner Join. Join ist die Abkürzung für Inner Join. Es verbindet sich selbst mit sich selbst. Voraussetzung ist, dass der Punktestand der rechten Tabelle größer oder gleich dem der linken Tabelle ist. Dann werden die Gruppen gruppiert und in absteigender Reihenfolge der Punktestände angeordnet. Es ist eine sehr clevere Lösung:

Lösung 3:

Wählen Sie s.Score, COUNT (DISTINCT t.Score) Rang
VON Punkte s VERBINDE Punkte t AUF s.Punktzahl <= t.Punktzahl
GROUP BY s.Id ORDER BY s.Score DESC;

Die folgende Lösung unterscheidet sich von den drei obigen Lösungen. Hier werden zwei Variablen verwendet. Bei Verwendung muss vor der Variablen ein @ hinzugefügt werden. Das := bedeutet hier Zuweisung. Wenn davor ein Set-Schlüsselwort steht, können Sie direkt das =-Zeichen verwenden, um einen Wert zuzuweisen. Wenn nicht, müssen Sie := verwenden, um einen Wert zuzuweisen. Es gibt zwei Variablen rank und pre, wobei rank die aktuelle Rangfolge darstellt und pre die vorherige Punktzahl. Das <> im folgenden Code bedeutet ungleich. Wenn die linke und rechte Seite ungleich sind, wird true oder 1 zurückgegeben. Wenn sie gleich sind, wird false oder 0 zurückgegeben. Initialisieren Sie den Rang auf 0 und pre auf -1 und ordnen Sie die Punktzahlen dann in absteigender Reihenfolge an. Für Punktzahl 4 wird pre der Wert 4 zugewiesen, was sich vom vorherigen pre-Wert von -1 unterscheidet. Daher wird der Rang um 1 erhöht, sodass der Rang von Punktzahl 4 1 ist. Die nächste Punktzahl ist immer noch 4, daher wird pre der Wert 4 zugewiesen, was der vorherigen 4 entspricht. Daher wird der Rang um 0 erhöht, sodass der Rang dieser Punktzahl 4 ebenfalls 1 ist, und so weiter. Der Rang aller Punktzahlen kann berechnet werden.

Lösung 4:

SELECT-Score,
@rank := @rank + (@pre <> (@pre := Punktzahl)) Rang
Von Punktzahlen, (SELECT @rank := 0, @pre := -1) INIT 
ORDER BY Punktzahl DESC;

Quellen:

https://leetcode.com/discuss/40116/simple-short-fast

Dies ist das Ende dieses Artikels über die SQL-Implementierung von LeetCode (178. Punkterang). Weitere relevante Inhalte zum Punkterang der SQL-Implementierung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • 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)
  • SQL-Implementierung von LeetCode (177. N-höchstes Gehalt)
  • SQL-Implementierung LeetCode (176. Zweithöchstes Gehalt)
  • SQL-Implementierung LeetCode (185. Top drei der höchsten Gehälter in der Abteilung)

<<:  Zusammenfassung der englischen Namen chinesischer Schriftarten

>>:  JS implementiert das Schlangenspiel

Artikel empfehlen

MySQL-Datentabellenpartitionierungsstrategie und Vor- und Nachteileanalyse

Inhaltsverzeichnis Warum brauchen wir Partitionen...

Mehrere Implementierungsmethoden der Tab-Leiste (empfohlen)

Registerkarten: Kategorie + Beschreibung Tag-Leis...

Detaillierter Installationsprozess der MySQL 8.0 Windows-ZIP-Paketversion

Der Installationsprozess von MySQL 8.0 Windows Zi...

Eine detaillierte Einführung in die Linux-Systemkonfiguration (Dienststeuerung)

Inhaltsverzeichnis Vorwort 1. Systemdienststeueru...

Konfigurieren Sie die Java-Entwicklungsumgebung in Ubuntu 20.04 LTS

Laden Sie das Java Development Kit jdk herunter D...

Zusammenfassung der Diskussion zur Gültigkeitsdauer von Nginx-Cookies

Bei jedem Besuch wird im Browser Cookie generiert...

Implementierung der kollaborativen Nutzung von React-Komponenten

Inhaltsverzeichnis Verschachtelung Kommunikation ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.15

In diesem Artikel wird die Installations- und Kon...