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