Heim >Datenbank >MySQL-Tutorial >Wie bekomme ich die Top -N -Zeilen für jede Gruppe in MySQL?
extrahieren obere N -Zeilen für jede Gruppe in MySQL
Müssen Sie die Top -N -Zeilen für jede Gruppe in Ihren MySQL -Daten abrufen? Die Standardbestellung bietet Ihnen möglicherweise nicht immer die Ergebnisse, die Sie erwarten. Diese Anleitung zeigt, wie MySQLs leistungsstarke Fensterfunktionen wie ROW_NUMBER
, RANK
und DENSE_RANK
verwendet werden, um dies effizient zu erreichen.
Stellen Sie sich eine Tabelle mit PKID
(Primärschlüssel), CATID
(Kategorie) und value
-Pralen vor. Um die Top 5 Zeilen für jedes CATID
zu erhalten, verwenden Sie die Funktion ROW_NUMBER
:
<code class="language-sql">SELECT PKID, CATID, value, ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum FROM table_name;</code>
ROW_NUMBER
weist in jeder CATID
-Gruppe einen eindeutigen Rang zu, der von value
(in diesem Fall absteigende) geordnet ist. Um nur die Top 5 zu filtern, wickeln Sie diese in eine Unterabfrage ein:
<code class="language-sql">SELECT PKID, CATID, value FROM ( SELECT PKID, CATID, value, ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum FROM table_name ) AS subquery WHERE RowNum <= 5;</code>
Diese raffinierte Abfrage ruft effizient nur die Top 5 Zeilen pro Kategorie ab und bietet eine genaue und optimierte Lösung für Ihre Datenabrufanforderungen. Denken Sie daran, den Zustand <= 5
zur Steuerung der Anzahl der gewünschten oberen Zeilen pro Gruppe anzupassen.
Das obige ist der detaillierte Inhalt vonWie bekomme ich die Top -N -Zeilen für jede Gruppe in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!