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

Interaktion im Webdesign: Eine kurze Diskussion über Paging-Probleme

Funktion: Zur vorherigen Seite oder zur nächsten ...

Anweisungen zur Verwendung des HTML-Tags dl dt dd

Grundaufbau: Code kopieren Der Code lautet wie fol...

Einführung in CSS-Stileinführungsmethoden und ihre Vor- und Nachteile

Drei Möglichkeiten, CSS einzuführen 1. Inline-Sti...

So verwenden Sie den Linux-Befehl seq

1. Befehlseinführung Mit dem Befehl seq (Sequence...

Vue realisiert die Funktion zum Hochladen von Fotos auf den PC

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung des MySQL Shell import_table-Datenimports

Inhaltsverzeichnis 1. Einführung in import_table ...

Lösung für das Problem des achtstündigen Unterschieds bei der MySQL-Einfügezeit

Lösen Sie das Problem des achtstündigen Zeitunter...

Beginnen Sie CSS-Pseudoklassennamen nicht mit Zahlen

Wenn Neulinge Div+CSS entwickeln, müssen sie die ...

Einige wichtige Punkte des visuellen Website-Designs

Vom Kunsthandwerksdesign über Grafikdesign bis hin...

CSS-Rand halb oder teilweise sichtbarer Implementierungscode

1. Verwenden Sie Pseudoklassen, um die Hälfte des...

Detaillierte Erklärung des TARGET-Attributs des HTML-Hyperlink-Tags A

Das Hyperlink-Tag <a> stellt einen Linkpunkt...

So aktualisieren Sie MySQL 5.6 auf 5.7 unter Windows

Vorne geschrieben Es gibt zwei Möglichkeiten, MyS...

Teilen Sie 12 häufig verwendete Loader in Webpack (Zusammenfassung)

Inhaltsverzeichnis Vorwort Stillader CSS-Lader Sa...