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

DDD
發布: 2024-11-13 00:20:02
原創
831 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板