• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MAX()でENUMの内部番号が最大の文字列を取得)

MySQLのMAX関数でENUMの内部番号が最大の文字列を取得する方法

このQ&Aのポイント
  • MySQLのMAX関数を使用して、ENUMの内部番号が最大の文字列を取得する方法について説明します。
  • ENUM列の内部番号が最大の値を取得するためには、ORDER BY句を使用して内部番号を降順でソートし、LIMIT句を使用して結果を1行だけ取得します。
  • この方法により、文字列としての最大値ではなく、内部番号が最大のENUM列の値を取得することができます。

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

  • ベストアンサー
回答No.2

マニュアルを、少しは見ましたか? ENUM列に対し、+0といった操作をすると、インデクス値を得られます。 すなわち、インデクス値が最大のもの、最小のものも、これを利用することで得られます。 例) select * from t1 where data+0=(select max(data+0) from t1); ただし、こういった演算を行うと、仮にインデクスが定義されていても、MySQLは活用してくれませんので、データ量が数十万件以上といいった場合は、テーブル設計を見直したほうがいいでしょう。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/enum.html
zyousuke
質問者

お礼

こんにちは! マニュアルを、少しは見ました しかし、そこは触れないでいただきたかった^^; マニュアルが面倒だから聞きに来たのです。と説明することも最近はおっくうになってしまったもので・・・ ENUMのインデクスの利用法について、よく分かりました。 しかしWHEREでやるとMAX()条件に一致した行しか取れないので、これを参考にさらにトリッキーなSQLを組み立てることになりそうです。 私としてはMAX()一本で簡単に取れる方法があればと思っていたのですが、どうやら無理そうですね・・・ しかしながら私はすでにMAX()を使わずに、そこそこいい感じのSQLをこしらえることができたので、今回はこれでよしとします;;

その他の回答 (2)

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

>マニュアルが面倒だから聞きに来たのです それは言っちゃまずいですね、嘘でもマニュアル見たけど解らなかったと 言わないと、「教えてクン」認定されますよ ちなみに、ORDER BY DESC して LIMIT 1をとってもだめですかね?

zyousuke
質問者

お礼

その件に関しては私も主張したいのですが、ぐっと我慢します! 論争が激しくなると、また削除隊に動かれるので^^ ORDER BYでインデクス順に整列できることは確認済ですが、LIMIT 1だと1行しか取れないので、MAX()一本で簡単に取れる方法があればと思った次第です。

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

MIN()じゃないの?・・・というツッコミはおいておいて きちんとやりたいならenumなど使わず、外部キー制約をつかって 子テーブル側でソート用のデータを指定しておくなどが有効でしょう

zyousuke
質問者

お礼

こんにちは!! MIN()にしたら見事に'せん10'が返りました! しかし、これは偶然のたまものに過ぎず'せん10'がない状況では'せん2'(望む値は'せん9')が返りました やはりmysqlの集約関数では難しそうですね。 テーブル構成を変更するのは非現実的なので、当該案件はあきらめることとなりそうです・・・

関連するQ&A