ホームページ >データベース >mysql チュートリアル >SQL で条件に基づいてデータを動的に並べ替えることはできますか?
ORDER BY に "If" ステートメントを含めることはできますか?
SQL では、ORDER BY 句を使用して結果を並べ替えます。昇順または降順のクエリ。しかし、条件に基づいて異なる並べ替え基準を適用したい場合はどうすればよいでしょうか?
課題:
「Type」という列を持つテーブルがあるとします。レコードが「メンバー」を表すか「グループ」を表すかを示します。タイプが「メンバー」の場合はメンバーの姓で、タイプが「グループ」の場合はグループ名で結果を並べ替えたいとします。
不正な試み:
最初に次のクエリを試行するかもしれません:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
正解解決策:
代わりに、2 つの実行可能なアプローチがあります:
1. IF 関数:
MySQL の IF 関数を使用すると、式を条件付きで評価し、条件が true の場合は 1 つの値を返し、条件が false の場合は別の値を返すことができます。 ORDER BY での使用方法は次のとおりです:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
2. CASE ステートメント:
CASE ステートメントは、複数の条件を処理するためのより柔軟な方法を提供します。条件を評価し、一致するケースごとに特定の値を返します。 CASE ステートメントの結果が並べ替え基準になります。
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
注:
CASE ステートメントでは、「ELSE 1」により、一致するレコードがないことが保証されます。型の値は最後にソートされます。
以上がSQL で条件に基づいてデータを動的に並べ替えることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。