Auswählen der obersten Zeilen pro Kategorie in MySQL
Um eine begrenzte Anzahl von Zeilen aus jeder Kategorie in einer Tabelle abzurufen, können Sie Analysefunktionen verwenden . Allerdings bietet MySQL diese Funktionen nicht direkt an. Dennoch ist es möglich, sie mithilfe von Variablen zu emulieren.
Emulieren von Analysefunktionen
Die folgende MySQL-Abfrage emuliert die Funktionalität von Analysefunktionen, um die obersten drei Zeilen für jede Kategorie auszuwählen :
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 Erläuterung
- Die Unterabfrage wählt alle Zeilen aus der TBL_ARTIKUJT-Tabelle aus und initialisiert zwei Sitzungsvariablen, @rownum und @category. um das aktuelle Ranking und die aktuelle Kategorie zu verfolgen.
- Der jeder Zeile zugewiesene Rang gibt seine Position innerhalb seiner Kategorie an. Wenn eine neue Kategorie gefunden wird, wird der Rang auf 1 zurückgesetzt.
- var_category wird zum Speichern der Kategorie für jede Zeile verwendet.
- Die äußere SELECT-Anweisung filtert die Unterabfrage und wählt nur Zeilen mit einem Rang aus kleiner oder gleich 3.
Mit dieser Methode können Sie die gewünschte Funktionalität implementieren, ohne auf Analysefunktionen angewiesen zu sein, die von MySQL nicht unterstützt werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3