SQL implementiert LeetCode (180. Fortlaufende Zahlen)

SQL implementiert LeetCode (180. Fortlaufende Zahlen)

[LeetCode] 180. Aufeinanderfolgende Zahlen

Schreiben Sie eine SQL-Abfrage, um alle Zahlen zu finden, die mindestens dreimal hintereinander vorkommen.

+----+-----+
| ID | Nummer |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+

Beispielsweise ist 1 in der obigen Protokolltabelle die einzige Zahl, die mindestens dreimal hintereinander vorkommt.

Diese Frage gibt uns eine Logs-Tabelle und fordert uns auf, die Zahlen zu finden, bei denen dieselbe Zahl dreimal hintereinander in der Spalte Num vorkommt. Da wir dieselbe Zahl dreimal finden müssen, müssen wir drei Tabelleninstanzen erstellen. Wir können l1 verwenden, um jeweils eine Schnittmenge mit l2 und l3 zu bilden, die nächste Position von l1 und l2s ID vergleichen und die nächsten beiden Positionen von l1 und l3 vergleichen und dann die Zahlen mit derselben Num zurückgeben:

Lösung 1:

Wählen Sie DISTINCT l1.Num FROM Logs l1
JOIN-Protokolle l2 ON l1.Id = l2.Id - 1
JOIN-Protokolle l3 ON l1.Id = l3.Id - 2
WO l1.Num = l2.Num UND l2.Num = l3.Num;

Die folgende Methode verwendet kein Join, sondern sucht direkt in den Instanzen der drei Tabellen und schränkt dann die vier Bedingungen ein, um das richtige Ergebnis zurückzugeben:

Lösung 2:

Wählen Sie DISTINCT l1.Num FROM Logs l1, Logs l2, Logs l3
WO l1.Id = l2.Id - 1 UND l2.Id = l3.Id - 1
UND l1.Num = l2.Num UND l2.Num = l3.Num;

Schauen wir uns eine ganz andere Methode an. Die Variablen count und pre werden verwendet und auf 0 bzw. -1 initialisiert. Dann ist zu beachten, dass die IF-Anweisung verwendet wird. Die IF-Anweisung in MySQL unterscheidet sich von der if-Anweisung in anderen uns bekannten Sprachen. Sie entspricht dem bekannten ternären Operator a?b:c. Wenn a wahr ist, gibt sie b zurück, andernfalls gibt sie c zurück. Schauen wir uns dann zuerst die erste Zahl 1 in der Spalte Num an. Da pre auf -1 initialisiert ist, was sich von der aktuellen Num unterscheidet, wird count zu diesem Zeitpunkt 1 zugewiesen und pre wird zu diesem Zeitpunkt 1 zugewiesen. Dann kommt die zweite 1 in der Spalte Num herein und pre ist zu diesem Zeitpunkt gleich Num. Count erhöht sich um 1. Wenn die dritte 1 in der Spalte Num hereinkommt, erhöht sich count auf 3. Zu diesem Zeitpunkt ist die Where-Bedingung erfüllt, tn >= 3, also wird 1 ausgewählt. Und so weiter, wobei die gesamte Num durchlaufen wird, um das Endergebnis zu erhalten:

Lösung 3:

Wählen Sie eine unterschiedliche Zahl aus (
WÄHLEN Sie Num, @count := WENN(@pre = Num, @count + 1, 1) AS n, @pre := Num
AUS Protokollen, (SELECT @count := 0, @pre := -1) AS init
) ALS t, wobei tn >= 3;

Quellen:

https://leetcode.com/discuss/54463/simple-solution

https://leetcode.com/discuss/87854/simple-sql-with-join-1484-ms

https://leetcode.com/discuss/69767/two-solutions-inner-join-and-two-variables

Dies ist das Ende dieses Artikels über die SQL-Implementierung von LeetCode (180. Kontinuierliche Zahlen). Weitere relevante Inhalte zur SQL-Implementierung von kontinuierlichen Zahlen 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 (196. Doppelte Postfächer löschen)
  • SQL-Implementierung LeetCode (185. Top drei der höchsten Gehälter in der Abteilung)
  • 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)
  • C++-Implementierung von LeetCode (179. Maximale Anzahl an Kombinationen)
  • SQL-Implementierung von LeetCode (197. Steigende Temperatur)

<<:  Design-Sharing der Download-Seite des Pengyou.com-Mobilclients (Bild und Text)

>>:  Teilen Sie JS vier lustige Hacker-Hintergrundeffektcodes

Artikel empfehlen

Detaillierte Erklärung, wie MySQL (InnoDB) mit Deadlocks umgeht

1. Was ist ein Deadlock? Die offizielle Definitio...

So sichern Sie MySQL regelmäßig und laden es auf Qiniu hoch

In den meisten Anwendungsszenarien müssen wir wic...

Lösung für das 404/503-Problem beim Anmelden bei TeamCenter12

TeamCenter12 gibt das Kontokennwort ein und klick...

js implementiert ein einfaches Englisch-Chinesisch-Wörterbuch

In diesem Artikel wird der spezifische Code von j...

Detaillierte Erklärung zum Aktivieren des https-Dienstes in Apache unter Linux

Dieser Artikel beschreibt, wie man den https-Dien...

Probleme mit Vue, das die Homepage von Bibibili imitiert

Technische Struktur Das Projekt ist in zwei Teile...

Detaillierte Erklärung zur Verwendung von $props, $attrs und $listeners in Vue

Inhaltsverzeichnis Hintergrund 1. Dokumentbeschre...

Installationsschritte der Ubuntu 20.04-Doppelpinyin-Eingabemethode

1. Chinesische Eingabemethode einrichten 2. Stell...

Das WeChat-Applet implementiert einen Videoplayer, der einen Bullet-Screen sendet

In diesem Artikel wird der spezifische Code für d...

So erstellen Sie ein neues Image basierend auf einem vorhandenen Image in Docker

Das Erstellen neuer Images aus vorhandenen Images...