MySQL 查詢中 UNION 與 ORDER BY 的組合使用,實現排序後的結果分組
在 MySQL 中,我們可以使用 UNION 運算子組合多個查詢以合併其結果。處理此類查詢時,以特定方式對組合結果進行排序可能很有益。
假設您要從單一表格中根據與某個位置的距離提取不同類型的記錄。假設您有以下三個查詢:
<code class="language-sql">SELECT id, add_date FROM Table WHERE distance = 0; SELECT id, add_date FROM Table WHERE distance < 5; SELECT id, add_date FROM Table WHERE distance BETWEEN 5 AND 15;</code>
使用 UNION 組合這些查詢後,您可能想要對每個標題下的結果進行排序,例如「精確搜尋結果」、「5 公里內的結果」等等。
為此,我們可以為每個 SELECT 語句使用一個名為「Rank」的偽列。此列將包含其特定分組中每筆記錄的排名,以便我們可以在應用任何其他排序標準之前按其進行排序。
以下是如何實現此目的的範例:
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM Table WHERE distance = 0 UNION ALL SELECT 2 AS Rank, id, add_date FROM Table WHERE distance < 5 UNION ALL SELECT 3 AS Rank, id, add_date FROM Table WHERE distance BETWEEN 5 AND 15 ) AS combined_results ORDER BY Rank, id, add_date;</code>
在此查詢中,結果將首先按「Rank」列排序,這將根據搜尋類型(精確、5 公里以內或 5-15 公里以內)對記錄進行分組。在每個分組中,記錄將按“id”和“add_date”排序。
以上是如何使用排名列對來自 UNION 的合併 MySQL 查詢結果進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!