首頁 >資料庫 >mysql教程 >如何在分組前將 MySQL 結果排序?

如何在分組前將 MySQL 結果排序?

Barbara Streisand
Barbara Streisand原創
2024-11-16 11:14:02396瀏覽

How to Order MySQL Results Before Grouping?

MySQL:在 Group By 之前對結果進行排序

在 MySQL 中對結果進行分組時,了解操作順序順序非常重要。預設情況下,MySQL 會對分組後的結果進行排序,這在某些情況下可能不是所需的行為。

原始查詢和限制

考慮以下內容查詢:

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

此查詢正確地將結果分組,以僅顯示每個作者的最新貼文。但是,結果是在分組之後排序的,因此最新的帖子不一定位於列表的開頭。

使用HAVING 的解

將結果排序在分組前,我們可以使用HAVING 子句:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date)
ORDER BY wp_posts.post_date DESC

HAVING 子句對分組後的結果進行過濾,確保只傳回每個作者的post_date 最大的行。這保證了最新的帖子顯示在清單的開頭。

其他資料庫的替代解決方案

如果使用不支援HAVING 子句的資料庫(例如Postgres 或SQL Server),另一個解決方案是將原始表與計算每個作者的最大post_date 的子查詢連接起來:

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
ORDER BY wp_posts.post_date

以上是如何在分組前將 MySQL 結果排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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