ホームページ >データベース >mysql チュートリアル >ORDER BY を使用して MySQL UNION の結果をグループごとに並べ替えるにはどうすればよいですか?
MySQL の UNION
演算子は、複数の SELECT
ステートメントの結果を結合します。 ただし、これらの組み合わせた結果の順序付けは、特に個々のグループ内で並べ替える必要がある場合には難しい場合があります。このガイドでは、擬似列を使用してこれを実現する賢い方法を説明します。
解決策には次の手順が含まれます:
疑似列の導入: 個々の SELECT
ステートメントのそれぞれに列 (「ランク」と呼びます) を追加します。この列はグループ識別子として機能し、各グループに一意の値を割り当てます。
UNION
を構築します。 SELECT
(重複を削除する必要がある場合は UNION ALL
) を使用して、変更した UNION
ステートメントを結合します。
外側のクエリを使用した順序: UNION
を外側の SELECT
ステートメント内でラップします。 この外側のクエリの ORDER BY
句で、主な並べ替え基準として 'Rank' 列を使用します。
並べ替えを調整します: 「ランク」(グループ化) で並べ替えた後、2 番目の並べ替え基準 (「id」または「add_date」など) を追加して、各グループ内の結果をさらに並べ替えます。
具体的な例:
列「id」と「add_date」を持つ「table」という名前のテーブルがあるとします。次のクエリはこの手法を示しています:
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM table UNION ALL SELECT 2 AS Rank, id, add_date FROM table WHERE distance < 10 -- Example condition for a group ) AS combined_results ORDER BY Rank, id, add_date;</code>
このクエリは、「Rank」列 (最初のグループに 1、2 番目のグループに 2) を追加し、外側の SELECT
を使用して、最初に「Rank」 (結果をグループ化) で並べ替え、次に「id」で並べ替え、各グループ内の「add_date」。 これにより、個々の SELECT
ステートメントによって生成されたデータの各サブセット内で適切な順序が保証されます。 table
とサブクエリ内の条件を実際のテーブルとフィルタリング ロジックに置き換えてください。
以上がORDER BY を使用して MySQL UNION の結果をグループごとに並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。