Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql-Abfrage:Wählen Sie für jede Kategorie die obersten 3 Zeilen aus der Tabelle aus

LIMIT stoppt nur die Anzahl der Ergebnisse, die die Anweisung zurückgibt. Was Sie suchen, wird im Allgemeinen als Analyse-/Windowing-/Ranking-Funktionen bezeichnet - die MySQL nicht unterstützt, aber Sie können sie mit Variablen emulieren:

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @category != t.category THEN @rownum := 1 
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @category := t.category AS var_category
          FROM TBL_ARTIKUJT t
          JOIN (SELECT @rownum := NULL, @category := '') r
      ORDER BY t.category) x
 WHERE x.rank <= 3

Wenn Sie SELECT x.* nicht ändern , enthält die Ergebnismenge den rank und var_category Werte - Sie müssen die Spalten angeben, die Sie wirklich wollen, wenn dies nicht der Fall ist.