In SQL, wie Sie die obersten 2 Zeilen für jede Gruppe
Ich habe eine Tabelle wie folgt:
NAME SCORE
-----------------
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6
Hier ist die Probe
Die aggregation-Funktion für group by
nur erlauben Sie mir, Holen Sie sich die höchste Punktzahl für jede name
.
Ich möchte eine Abfrage machen, um die höchsten 2 Punkte für jedes name
, wie soll ich tun?
Meine erwartete Ausgabe ist
NAME SCORE
-----------------
willy 2
willy 3
zoe 5
zoe 6
InformationsquelleAutor waitingkuo | 2013-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies führt in der Tat dazu ziemlich schwere performance-Probleme (die sub-select ist quadratisch).
Diese kann getan werden, Linear, siehe "MySQL-Abfrage zu Top 2" hier sqlines.com/mysql/how-to/get_top_n_each_group
diese Bezugnahme ist gold!!!
Danke! @Holz
InformationsquelleAutor John Woo
In MySQL verwenden, können Sie Benutzer-definierte Variablen um eine Zeile in jede Gruppe:
Sehen Demo
Leider MySQL nicht windowing-Funktionen, die es Ihnen ermöglichen, weisen Sie eine Zeilennummer ein, um die einzelnen Zeilen in einer Gruppe.
danke das ist eine sehr schöne Lösung, es arbeitete sehr schnell, auch auf 30k Zeilen etwas, meine frühere Lösung mit Verknüpfungen sehr langsam
Ist dies sicher? MySQL-Staaten "die Auswertungsreihenfolge für Ausdrücke mit Variablen ist nicht definiert." und bedeutet das nicht, dass @prev:= - name ausgewertet werden konnten, bevor Sie Ihre case-Anweisung und damit die case-Anweisung würde künstlich wahr sein? Oder bin ich etwas fehlt? Siehe dev.mysql.com/doc/refman/5.5/en/user-variables.html
Sie sind richtig, ich habe aktualisiert mein Antwort.
InformationsquelleAutor Taryn
Wenn Sie nichts dagegen haben, dass zusätzliche Spalte, dann können Sie den folgenden code verwenden:
Rang-Funktion bietet eine Reihe für jede partition, in deinem Fall ist es der name
InformationsquelleAutor Avinash Shastri
HIERFÜR können Sie dies tun-
http://www.sqlfiddle.com/#!2/ee665/4
aber um die ersten 2 Abfrage verwenden, sollten Sie eine ID dann laufen Grenzwert für ID wie 0,2.
ja ich war nur Angabe von Methode, können Sie tun es einfach, wenn Sie gepflegt haben ID für jede Zeile (primary key) es wird die Arbeit mehr und Sie werden mehr Funktionen in die hand. In der Art, müssen Sie Ihre langen code und auch , es wird schwieriger für Sie, um etwas anderes über Sie in der Zukunft.
InformationsquelleAutor devilcrab
Können Sie tun somthething wie diese:
InformationsquelleAutor user2674659
InformationsquelleAutor Jhamman Sharma
Diese Abfrage verwenden.
Lösung Hier:
https://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
InformationsquelleAutor Ronald Rivera