- ベストアンサー
複数条件の検索について
- MySQL上のテーブルからのデータ抽出で、複数条件の検索に困っています。
- SUM関数・COUNT関数およびGROUP BYを使い、内部結合・外部結合などの手法を試しましたが、正しい構文がわからず、欲しい結果が得られません。
- 教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MySQLの質問をする場合、少なくともMySQL 4.1、MySQL 5.0、MySQL 5.1レベルまでバージョンを明記するようにしてください。 -- SQL例 SELECT id ,SUM(tokuten) AS goukei ,SUM(tokuten BETWEEN 10 AND 29) AS kensuu_1 -- (1) ,SUM(CASE WHEN tokuten BETWEEN 10 AND 29 THEN 1 ELSE NULL END) as kensuu_2 -- (2) FROM t1 GROUP BY id ; (1)MySQLでは式の真偽を、1と0の数値として利用できます。 (2)より一般的なSQLとしては、CASE式を使うといった方法があります。
その他の回答 (1)
- yamada404
- ベストアンサー率56% (9/16)
そちらの環境で通るか分かりませんが、select句の中でselectが使えるのであれば 以下のSQLで取得出来ると思います。 select ID , SUM(得点) , ( select count(B.*) from スコア as B where A.ID = B.ID and B.得点 >= 10 and B.得点 < 30 ) from スコア as A group by ID select句ではなくfrom句で一時表が使えるのであれば以下のSQLで取得出来ると思います。 select A.ID , A.得点 , count(B.ID) from (select ID as ID , SUM(得点) as 得点 from スコア group by ID ) as A left outer join スコア as B on A.ID = B.ID and B.得点 >= 10 and B.得点 < 30 group by A.ID, A.得点 一時表を使わない方式 (※IDと得点で一意となる事が前提になります) select A. ID as ID , SUM(A.得点) as 得点 , COUNT(B.ID) from スコア as A left outer join スコア as B on A.ID || A.得点 = B.ID || B.得点 and B.得点 >= 10 and B.得点 < 30 group by A.ID
お礼
さっそくの回答有難うございました。 当方の環境(SQL 5.1.22)で、試したところ 1. syntaxエラーが発生 2. Unknown column 'A.ID' in 'field list' エラー発生 3. 得点は残念ながら一意ではありません ということでうまく実行結果が得られませんでした。 ただ、LEFT JOINの使い方については非常に参考になりました。 有難うございます。
お礼
さっそくの回答有難うございます。 書いていただいた構文をもとに実行したところ、(1),(2)いずれの場合でも欲しい結果を得ることができました。 (1)MySQLでは式の真偽を、1と0の数値として利用できます。 (2)より一般的なSQLとしては、CASE式を使うといった方法があります。 非常に勉強になりました。 有難うございました。 また、己の環境について記述するべきところを省いてしまい 申し訳ありませんでした。 以降質問する際には気をつけたいと思います。 (当方の環境はMySQL 5.1.22でした)