- ベストアンサー
Mysql サブクエリの使い方
- Mysqlサブクエリを使用してテーブルの合計を求める方法について説明します。
- table_Aとtable_Bのテーブルを使用して、idごとのsub_countの合計が一致しないidを抽出するためのクエリを作成しましたが、エラーが発生しています。
- 初心者のため、正しいクエリの書き方がわかりません。エラーの原因と解決方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
抽出方法としては、2つのテーブルをidで連結し、idでグループ化して、sub_count の合計とcountが違うと言う条件で検索すればよいでしょう。 例 ----------------------------------------------- SELECT table_a.id, count, SUM(sub_count) FROM table_a LEFT OUTER JOIN table_b USING(id) GROUP BY table_a.id, count HAVING count != SUM(sub_count); -------------------------------------------------- (Ver.5.5.8で確認しました。MySQLのバージョンによってはエラーが出るかもしれません。) > ERROR 1111 (HY000): Invalid use of group function > 何が悪いのでしょうか? SQLの構文的には最後の行です。 > table_A.count != sum(table_B.sub_cout) WHERE句に集約関数を書いているためです。 また、サブクエリでtable_bのsub_coutを合計していますが、WHERE句に何も記述が無いので検索条件には反映されません。 書き直してみると下記の様な感じになるかと思います。 (こちらでも正しい結果が得られるかと) 例 ----------------------------------------------- SELECT table_A.id FROM (SELECT id, sum(sub_count) AS total_sub_count FROM table_B GROUP BY id) AS B, table_A WHERE table_A.id = B.id AND table_A.count != B.total_sub_count --------------------------------------------------
お礼
ありがとうございました。 とりあえず、サブクエリの方法でテストして見たところうまく行きました。 >抽出方法としては、2つのテーブルをidで連結し、idでグループ化して、sub_count の合計とcountが違うと言う条件で検索すればよいでしょう。 なるほど、と言うかまだ解釈できていませんが、研究してみます。 ありがとうございました。