- ベストアンサー
2つの列を合わせてソートする方法はありますか?
- 「ground」と「bldg」の2つの列で数値が大きい順にソートしたい場合、通常のORDER BY文ではうまくいかないことがあります。実現するためには、CONCAT関数を使用して2つの列を結合し、ソートする必要があります。
- 具体的には、SELECT文でCONCAT関数を使って「ground」と「bldg」の値を結合し、新たな列として表示します。そして、新たな列をソートキーとしてORDER BY文を使用します。これにより、2つの列を合わせてソートすることができます。
- 以上の手順を実行すると、要件に合ったソート結果を得ることができます。ただし、ソートの順序を逆にしたい場合は、新たな列をソートキーとしてDESCキーワードを使用してください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
実機確認してませんが、こんな感じでは。 SELECT * FROM `test` ORDER BY GREATEST(`ground`,`bldg`) DESC
その他の回答 (4)
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンを、少なくともMySQL 4.1 や MySQL 5.0といったレベルまで提示するようにしてください。 また、#2さんへの返答のように、単に「エラーになる」でなく、具体的にどんなエラーメッセージやコードが出るのか、明記するようにしてください。それが、他の人がアドバイスする上で参考になります。 GREATEST関数は、指定された引数のうち、最大値を返す関数であり、今回の質問の用途に合致するのではないかと思います。 ちなみに、MySQL 3.22.5 より前の MySQLでは、GREATEST関数でなく、MAX関数を書くこともできました。
お礼
バージョンを明記しようと思い、忘れてしまいました。 次回からは気をつけたいと思います。 ご指摘ありがとうございました。 GREATEST関数というものは知りませんでした。 調べてみたところ、GREATESTの引数には数字が指定してあったのですが このような使い方も出来るのですね。 とても勉強になりました。ありがとうございました。
- askaaska
- ベストアンサー率35% (1455/4149)
SELECT name,area,ground,bldg from (select name,area,ground,bldg,max(ground,bldg) as maxvalue from test) ORDER BY maxvalue DESC; こうね。 動作確認はしていないけど 考え方は間違っていないわよ。
お礼
再度ご回答いただきありがとうございます。 FROM句の後ろはテーブル名しか指定できないと思っていましたがこのような書き方もできるのですね。 (ただエラーが出てしまい、どこを修正したらいいのかわかりません・・・。下記のエラーです↓) #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`bldg`) as maxvalue from `test`) ORDER BY maxvalue DESC' at line 1 今後のために時間をかけて調べてみようと思います。 今回はchukenkenkou様にご回答いただいた内容で求める結果が求められたので一応解決しました。 どうもありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
SELECT * FROM `test` ORDER BY MAX(`ground` ,`bldg`) DESC;
お礼
ご回答ありがとうございます。 教えていただいてSQL文を実行してみましたが、エラーになってしまいました。 引き続き解決方法をご存知の方がいらっしゃいましたらよろしくお願いします。
- askaaska
- ベストアンサー率35% (1455/4149)
合わせて って足し算するとかそういう意味? それなら副問い合わせすればいいけど。 そうじゃないのかしら。
お礼
ご回答ありがとうございます。 足し算ではなく、「ground」と「bldg」の2つに入っている値を大きい数値から順にソートしたいです。
お礼
ご回答ありがとうございます。 このSQLで理想の結果でデータの抽出ができました。 ありがとうございました。