• ベストアンサー

【SQL】複数のカラムを合わせてソートしたい

mysqlで 駅1から徒歩何分、駅2から徒歩何分 というカラムがあり、 駅から近い順に並び替えるというものを作っているのですが 駅から何分を入力するところが駅1と駅2と2つカラムがあるため それらを合わせて、ソートしたいと考えています。 理想のレコードとして  駅1 徒歩2分 駅2 徒歩2分 駅2 徒歩3分 駅1 徒歩5分 駅2 徒歩6分 こんな感じにしたいのですが、 これを実現するにはどのようなソートを組めばよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

テーブルの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; ----------------------------------------

yuzuru0024
質問者

お礼

回答ありがとうございます。 大変分かりやすく参考になりました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ホントのところ、この手の処理は物件に対して最寄駅が不定なため 別テーブルにするのが正しいです。 構造が変えられないわけではないなら、検討ください

yuzuru0024
質問者

お礼

回答ありがとうございます。

関連するQ&A