首頁 >資料庫 >mysql教程 >如何在MySQL中按名稱分組之前按日期和時間排序?

如何在MySQL中按名稱分組之前按日期和時間排序?

DDD
DDD原創
2024-10-30 09:23:27208瀏覽

How to Sort by Date and Time before Grouping by Name in MySQL?

管理MySQL 中的排序與分組:結合ORDER BY 和GROUP BY 得到特定結果

在MySQL 中,實現所需的排序和分組當操作順序發生衝突時,資料可能具有挑戰性。這個問題提出了一個場景,目標是在按名稱對資料進行分組之前按日期和時間對資料進行排序。

如使用者所解釋的,使用 ORDER BY date ASC、time ASC 後面跟著 GROUP BY name 的標準方法失敗,因為在查詢中 GROUP BY 必須先於 ORDER BY。為了解決這個衝突,答案提供了兩種替代方法:

方法1:子查詢

第一種方法涉及在分組之前使用子查詢來實現所所需的排序:

<code class="sql">SELECT * 
FROM (
    SELECT * FROM table_name
    ORDER BY date ASC, time ASC 
) AS sub
GROUP BY name</code>

此子查詢建立一個臨時表sub,其中包含按日期和時間排序的資料。然後主查詢會按名稱對該臨時表進行分組,從而獲得所需的結果。

方法2:使用通用表表達式(CTE)

另一個通常使用的方法對於MySQL 8.0以上版本,是建立一個公共表表達式(CTE)來執行排序和分組:

<code class="sql">WITH sorted_data AS (
    SELECT * FROM table_name
    ORDER BY date ASC, time ASC 
)
SELECT * 
FROM sorted_data
GROUP BY name</code>

CTE,sorted_data,透過建立臨時表達到與子查詢相同的結果與排序後的資料一起,然後在主查詢中用於分組。

以上是如何在MySQL中按名稱分組之前按日期和時間排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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