Heim >Datenbank >MySQL-Tutorial >Wie wähle ich in MySQL die beiden besten Artikel aus jeder Kategorie aus?
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:
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 anzugebenDas 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!