„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie wähle ich die obersten drei Zeilen aus jeder Kategorie in MySQL ohne Analysefunktionen aus?

Wie wähle ich die obersten drei Zeilen aus jeder Kategorie in MySQL ohne Analysefunktionen aus?

Veröffentlicht am 03.11.2024
Durchsuche:629

How to Select the Top 3 Rows from Each Category in MySQL Without Analytic Functions?

Auswahl der obersten drei Zeilen aus mehreren Kategorien in MySQL

Die Auswahl der obersten Zeilen aus jeder Kategorie innerhalb einer Tabelle kann eine Herausforderung sein. Eine Methode, die Ansichten und Unterabfragen verwendet, wie im ersten Versuch beschrieben, kann falsche Ergebnisse zurückgeben.

Ein effektiverer Ansatz verwendet Analysefunktionen, die MySQL nicht nativ unterstützt. Es ist jedoch möglich, diese Funktionen mithilfe von Variablen zu emulieren. So geht's:

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 

Diese Abfrage initialisiert die Variablen @rownum und @category mithilfe einer JOIN-Operation. Anschließend weist es jeder Zeile basierend auf ihrer Kategorie einen Rang zu und erhöht den Rang, wenn sich die Kategorie ändert.

Abschließend wählt die Abfrage nur die Zeilen mit einem Rang von 3 oder weniger aus. Beachten Sie, dass Sie möglicherweise die SELECT x.*-Klausel ändern müssen, um nur die gewünschten Spalten einzuschließen.

Neuestes Tutorial Mehr>

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