- ベストアンサー
【SQL】複数のカラムを合わせてソートしたい
mysqlで 駅1から徒歩何分、駅2から徒歩何分 というカラムがあり、 駅から近い順に並び替えるというものを作っているのですが 駅から何分を入力するところが駅1と駅2と2つカラムがあるため それらを合わせて、ソートしたいと考えています。 理想のレコードとして 駅1 徒歩2分 駅2 徒歩2分 駅2 徒歩3分 駅1 徒歩5分 駅2 徒歩6分 こんな感じにしたいのですが、 これを実現するにはどのようなソートを組めばよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テーブルの1つのレコードに対して、小さい方だけを出力するのか、両方とも出力するのかによって変わってくるかと。 (テーブルの1レコードに付き、結果が1つになるのか2つになるのか) 例えば、下記の様なテーブルの場合、(1)と(2)の様な結果が考えられます。 テーブル ------------------------------- データA 駅1から2分 駅2から5分 データB 駅1から4分 駅2から3分 ---------------------------------------- (1) 1レコード中の小さい方だけを出力する場合 検索結果 ------------------------------- 駅1 2分 駅2 3分 ---------------------------------------- (2) 1レコード中の駅1・駅2の両方とも出力する場合 検索結果 ------------------------------- 駅1 2分 駅2 3分 駅1 4分 駅2 5分 ---------------------------------------- (1)の場合 SELECT 内でCASE式等によって小さいほうのカラムの値を出力し、それをソートのキーにすれば出来ます。 例 ------------------------------------- SELECT CASE WHEN 駅1からの距離 <= 駅2からの距離 THEN '駅1' ELSE '駅2' END, CASE WHEN 駅1からの距離 <= 駅2からの距離 THEN 駅1からの距離 ELSE 駅2からの距離 END FROM テーブル名 ORDER BY 2; ---------------------------------------- (2)の場合 駅1からの距離と駅2からの距離をそれぞれ取出し、UNION ALL で繋げて、距離のカラムをソートのキーにすれば出来ます。 例 ------------------------------------- SELECT '駅1', 駅1からの距離 FROM テーブル名 UNION ALL SELECT '駅2', 駅2からの距離 FROM テーブル名 ORDER BY 2; ----------------------------------------
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
ホントのところ、この手の処理は物件に対して最寄駅が不定なため 別テーブルにするのが正しいです。 構造が変えられないわけではないなら、検討ください
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 大変分かりやすく参考になりました。