Heim >Datenbank >MySQL-Tutorial >Wie wähle ich die obersten drei Zeilen aus jeder Kategorie in einer MySQL-Tabelle aus, ohne analytische Funktionen zu verwenden?

Wie wähle ich die obersten drei Zeilen aus jeder Kategorie in einer MySQL-Tabelle aus, ohne analytische Funktionen zu verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 14:58:02432Durchsuche

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

MySQL-Abfrage: Auswählen der obersten drei Zeilen aus jeder Kategorie in einer Tabelle

In diesem Szenario haben Sie eine Tabelle mit zahlreichen Datensätzen, nach Kategorie kategorisiert. Ihr Ziel ist es, nur die drei besten Artikel aus jeder Kategorie abzurufen. Während Sie versucht haben, eine Lösung mit Ansichten und LIMIT zu finden, führte dies zu einer begrenzten Anzahl von Datensätzen.

Um dieser Herausforderung zu begegnen, ist es notwendig, Analysefunktionen zu nutzen, die MySQL fehlen. Sie können jedoch mit Variablen einen ähnlichen Effekt erzielen:

<code class="sql">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</code>

Diese Abfrage verwendet die Variablen @rownum und @category, um die Zeilenrangfolge innerhalb von Kategorien zu verfolgen. Zunächst werden beide Variablen auf NULL-/Leerwerte gesetzt.

Für jede Zeile in der Tabelle (Alias ​​„t“) wird geprüft, ob sich die aktuelle Kategorie von der vorherigen unterscheidet. Wenn dies der Fall ist, weist es @rownum 1 zu; andernfalls erhöht es @rownum um 1. Gleichzeitig weist es die aktuelle Kategorie @category zu, um den Kontext für den Vergleich in nachfolgenden Zeilen beizubehalten.

Das Ergebnis ist eine temporäre Tabelle, die jede Zeile innerhalb ihrer Kategorie einordnet. Die letzte WHERE-Klausel filtert dann diese temporäre Tabelle, um nur Zeilen mit einem Rang von 3 oder niedriger anzuzeigen.

Denken Sie daran, die Spaltenverweise in der äußeren SELECT-Klausel (x.*) so anzupassen, dass sie mit den gewünschten Spalten übereinstimmen abrufen.

Das obige ist der detaillierte Inhalt vonWie wähle ich die obersten drei Zeilen aus jeder Kategorie in einer MySQL-Tabelle aus, ohne analytische Funktionen zu verwenden?. 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