MYSQLでtblというテーブルにtime,count,tagというフィールドの他にCategory1~Category27のフィールドがあります。tag以外はどれもint型です。

Category1~27でどれかが最大値がM以上である かつ countがN以上であるという条件でSELECTしたいのですが、
WHERE MAX(Category1)>=M OR ... OR MAX(Category27)>=M
のように書くしかないのでしょうか?いい書き方があれば教えてください。

また、このSQL文に「Category1~27でどれかが最大値がM以上である」という条件を適用するとどうなるでしょうか?
http://q.hatena.ne.jp/1277630884#a1024004

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/07/09 17:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Bombastus No.1

回答回数409ベストアンサー獲得回数52

ポイント27pt

コメントありがとうございます。


条件式は以下のようになります。

WHERE Category1>=M OR ... OR Category27>=M AND count>=N
id:aosdnb No.2

回答回数72ベストアンサー獲得回数0

ポイント27pt

WHERE Category1>=M OR ... OR Category27>=M AND count>=N

↑と同じくこうなります

id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント26pt

MySQLのバージョンを、最低限でもMySQL 4.0、4.1、5.0といったレベルまで明記願います。大きな機能追加や一部の仕様変更があります。

正規化していないために、こんな苦労をするということは分かった上での質問ですよね?

GREATEST関数で、各行のCategory1~27の最大値を拾って、Mと比較する方法はどうでしょうか?

SELECT * FROM tbl
 WHERE GREATEST(Category1,Category2, <中略> ,Category27)>=M
   AND `count`>=N

MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.1.3 比較関数と演算子

id:GanbareNIPPON

おおおおお、まさにこれです!

ありがとうございます。

2010/07/03 22:31:00
  • id:Bombastus
    >Category1~27でどれかが最大値がM以上
    何が主語なのか分かりません。
    具体的な例を挙げていただけると回答しやすくなります。
    よろしくお願いします。
  • id:GanbareNIPPON
    GanbareNIPPON 2010/07/02 18:27:58
    例えば、M=200,Gategory1=11,Gategory2=5000のレコードがあるとヒットします。

    >Category1~27でどれかが最大値がM以上
    これは今思うと間違いで、
    「Caterory1からCategory27までの中での最大値がM以上」
    といったほうが通じるはずです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません