首頁 >資料庫 >mysql教程 >為什麼 MySQL 中 ORDER BY 子句應用在 GROUP BY 子句之後?

為什麼 MySQL 中 ORDER BY 子句應用在 GROUP BY 子句之後?

DDD
DDD原創
2024-11-13 00:20:02910瀏覽

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

MySQL Order 先於Group By

在MySQL 中,執行同時涉及ORDER BY 和GROUP BY 子句的查詢時,需要注意ORDER BY 子句在GROUP BY 子句之後套用。這意味著結果首先分組然後排序,這可能不是所需的行為。

問題:

考慮以下查詢:

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

此查詢旨在檢索每個作者的最新帖子並按作者對結果進行分組。但是,ORDER BY 子句在 GROUP BY 子句之後套用,導致結果在分組後進行排序。

解決方案:

解決此問題問題,可以修改查詢以在分組之前執行排序:

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

此修改後的查詢首先按發布日期按降序對結果進行排序,然後再按作者分組。結果是,將檢索每個作者的最新貼文並將其放置在結果集中的第一個位置。

替代解決方案(對於非MySQL 資料庫):

中對於不支援分組前排序的資料庫,例如SQL Server 和PostgreSQL,可以採用替代解決方案:

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

此查詢使用子查詢來識別每個作者的最大發布日期,然後加入此查詢結果集與主wp_posts表一起檢索實際的貼文資料。請注意,此解決方案可能會為同一日期有多個帖子的作者返回多行,因此根據特定要求,可能需要進行額外的過濾。

以上是為什麼 MySQL 中 ORDER BY 子句應用在 GROUP BY 子句之後?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn