Heim >Datenbank >MySQL-Tutorial >Wie wähle ich in MySQL die beiden besten Artikel aus jeder Kategorie aus?

Wie wähle ich in MySQL die beiden besten Artikel aus jeder Kategorie aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 12:02:02636Durchsuche

How to Select the Top Two Articles from Each Category in MySQL?

MySQL-Abfrage: Auswahl der beiden besten Artikel aus jeder Kategorie

In MySQL wird häufig das Extrahieren einer bestimmten Anzahl von Zeilen aus einer Tabelle erreicht unter Verwendung der LIMIT-Klausel. Wenn jedoch mehrere Zeilen basierend auf der Gruppierung ausgewählt werden sollen, ist ein anderer Ansatz erforderlich. Dieser Artikel befasst sich mit einem bestimmten Szenario, bei dem zwei Zeilen aus jeder Kategorie in einer Tabelle ausgewählt werden sollen.

Ursprünglich versuchte der Benutzer, dies zu erreichen, indem er eine Ansicht erstellte, um Zeilen einzuschränken und anschließend eine Unterabfrage zu verwenden, um die gewünschten abzurufen Aufzeichnungen. Dieser Ansatz führte jedoch dazu, dass insgesamt nur zwei Datensätze zurückgegeben wurden.

Die Lösung liegt in der Verwendung sogenannter Fensterfunktionen. MySQL unterstützt keine Fensterfunktionen nativ, aber es ist möglich, ihre Funktionalität mithilfe benutzerdefinierter Variablen wie folgt zu 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;

In dieser überarbeiteten Abfrage:

  • Die äußere Abfrage wählt die Spalten aus der Tabelle TBL_ARTIKUJT (x.*) aus.
  • Die innere Abfrage, in Klammern eingeschlossen, berechnet den Rang jeder Zeile innerhalb jeder Kategorie. Außerdem werden zwei benutzerdefinierte Variablen definiert, @rownum und @category, die zum Verfolgen der aktuellen Zeilennummer und -kategorie verwendet werden.
  • Die WHERE-Klausel filtert die Ergebnisse so, dass nur Zeilen mit einem Rang von 3 oder weniger enthalten sind .

Dieser Ansatz emuliert effektiv Fensterfunktionen, um die gewünschten Zeilen aus jeder Kategorie zu gruppieren und auszuwählen. Wenn nur die Originalspalten abgerufen werden sollen, kann die äußere Abfrage geändert werden, um anstelle von x.*.

bestimmte Spaltennamen anzugeben

Das obige ist der detaillierte Inhalt vonWie wähle ich in MySQL die beiden besten Artikel aus jeder Kategorie aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn