[LeetCode] 178.RanglistenergebnisseSchreiben 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.
Beispielsweise sollte Ihre Abfrage anhand der obigen Punktetabelle den folgenden Bericht generieren (sortiert nach dem höchsten Punktestand):
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:
|
<<: Zusammenfassung der englischen Namen chinesischer Schriftarten
>>: JS implementiert das Schlangenspiel
Inhaltsverzeichnis Warum brauchen wir Partitionen...
Voraussetzung: Celery wird in Django eingeführt. ...
1. MySQL-Datenbank auf dem Mac installieren 1. My...
1. Prüfen Sie, ob Port 80 belegt ist. Normalerwei...
Registerkarten: Kategorie + Beschreibung Tag-Leis...
Der Installationsprozess von MySQL 8.0 Windows Zi...
Inhaltsverzeichnis 1. Grundlegender Überblick übe...
Inhaltsverzeichnis Vorwort 1. Systemdienststeueru...
Laden Sie das Java Development Kit jdk herunter D...
1. Konfigurieren Sie die lokale Yum-Quelle 1. Mou...
Inhaltsverzeichnis Hintergrund Wirkung Ideen Hint...
Bei jedem Besuch wird im Browser Cookie generiert...
Die Composition API implementiert Schritte zur Wi...
Inhaltsverzeichnis Verschachtelung Kommunikation ...
In diesem Artikel wird die Installations- und Kon...