Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum wird die ORDER BY-Klausel nach der GROUP BY-Klausel in MySQL angewendet?

DDD
Freigeben: 2024-11-13 00:20:02
Original
831 Leute haben es durchsucht

Why is the ORDER BY Clause Applied After the GROUP BY Clause in MySQL?

MySQL-Reihenfolge vor Group By

In MySQL ist es wichtig zu beachten, wenn eine Abfrage ausgeführt wird, die sowohl die ORDER BY- als auch die GROUP BY-Klausel umfasst dass die ORDER BY-Klausel nach der GROUP BY-Klausel angewendet wird. Das bedeutet, dass die Ergebnisse zunächst gruppiert und dann sortiert werden, was möglicherweise nicht das gewünschte Verhalten ist.

Problem:

Bedenken Sie die folgende Abfrage:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
ORDER BY wp_posts.post_date DESC
Nach dem Login kopieren

Diese Abfrage zielt darauf ab, den neuesten Beitrag für jeden Autor abzurufen und die Ergebnisse nach Autor zu gruppieren. Allerdings wird die ORDER BY-Klausel nach der GROUP BY-Klausel angewendet, was dazu führt, dass die Ergebnisse nach der Gruppierung geordnet werden.

Lösung:

Um dieses Problem zu beheben Bei diesem Problem kann die Abfrage geändert werden, um die Sortierung vor der Gruppierung durchzuführen:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
ORDER BY wp_posts.post_date DESC
GROUP BY wp_posts.post_author
Nach dem Login kopieren

Diese überarbeitete Abfrage sortiert die Ergebnisse zunächst nach Veröffentlichungsdatum in absteigender Reihenfolge, bevor die Gruppierung nach Autor durchgeführt wird. Das Ergebnis ist, dass der neueste Beitrag für jeden Autor abgerufen und an erster Stelle im Ergebnissatz platziert wird.

Alternative Lösung (für Nicht-MySQL-Datenbanken):

In Bei Datenbanken, die das Sortieren vor dem Gruppieren nicht unterstützen, wie etwa SQL Server und PostgreSQL, kann eine alternative Lösung verwendet werden:

SELECT
    wp_posts.*
FROM
    wp_posts
JOIN
    (
        SELECT
            g.post_author
            MAX(g.post_date) AS post_date
        FROM wp_posts AS g
        WHERE
            g.post_status='publish'
            AND g.post_type='post'
        GROUP BY g.post_author
    ) AS t
    ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
Nach dem Login kopieren

Diese Abfrage verwendet eine Unterabfrage, um das maximale Veröffentlichungsdatum für jeden Autor zu ermitteln, und verknüpft dieses dann Ergebnissatz mit der Haupttabelle wp_posts, um die tatsächlichen Beitragsdaten abzurufen. Beachten Sie, dass diese Lösung möglicherweise mehrere Zeilen für Autoren mit mehreren Beiträgen am selben Datum zurückgibt, sodass je nach spezifischen Anforderungen möglicherweise eine zusätzliche Filterung erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum wird die ORDER BY-Klausel nach der GROUP BY-Klausel in MySQL angewendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage