- ベストアンサー
2つのテーブルでの集計2
昨日解決したかと思ったのですが、また出来ないことが出てきたので 同じようなタイトルで再度質問に参りました。 以下のようなテーブルがあるとして、 ● T1 名前|A_id|B_id| AAAA|1111|----| BBBB|----|2222| CCCC|3333|4444| ● T2 id|A_id|金額 01|1111|2000 02|3333|1000 03|1111|4000 ● T3 id|B_id|金額 01|2222|2000 02|4444|4000 ● 抽出結果でやりたいこと →SUM(A_idの金額)とSUM(B_idの金額)を足した金額が5000以上のみ抽出 かつ、T2とT3のid(通し番号)はグループ化せずに個々で出す 名前|A_id|B_id|A金額|B金額|横の合計| AAAA|1111|----|6000 |-----|6000 idはT2:01/03 CCCC|3333|4444|1000 |4000 |5000 idはT2:02/T3:02 表の作成はOKなのですが、個々のデータのidがグループ化してしまって どのデータから参照しているのかわからない状態になってしまいます 抽出結果に応じたidのデータに出力された日付を書き込みたいのですが、 今の状態ですと1つ分にしか書き込みされません… 全く同じ条件下でT2、T3個々のデータのidを全件取り出すことは可能でしょうか??アドバイス宜しくお願いします。。。 MySQL クライアントのバージョン: 5.0.45
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんなんでどうでしょう? SELECT name, aid, bid, SUM(T2.price), SUM(T3.price), COALESCE(SUM(T2.price),0) + COALESCE(SUM(T3.price), 0) AS total, GROUP_CONCAT(T2.id), GROUP_CONCAT(T3.id) FROM T1 LEFT OUTER JOIN T2 USING(aid) LEFT OUTER JOIN T3 USING(bid) GROUP BY name HAVING total >= 5000; GROUP_CONCAT は方言ですが、類似の関数は他のRDBMSにも結構あります。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>データのidを全件取り出すことは可能でしょうか?? T2およびT3にそれぞれ結果を導いたSQLをサブクエリでinner joinしてやれば よいのでは? なんか構造的に破綻しそうな気がしますが、できないことはないでしょう
お礼
yambejpさん、回答ありがとうございます! 構造的に破綻…に笑ってしまいました。この方法は力技なんですね笑 ひとまず今回は仕様変更となり、より簡単な処理で足りることになったので idのみ取り出すSQL文で対応することにしました 前回に引き続きアドバイス頂き、助かりました。 またいつか私の質問を見かけたときは、是非アドバイスお願いします! ありがとうございましたー。
お礼
masa6272さん 回答ありがとうございました! 結局、仕様が変更になってしまってしまいました。 この質問をした時より簡単になったので、よしなのですが。 masa6272さんが書いて下さったコードも、落ち着いた頃に試してみて 今後に役立ててみようと思います。 知らない関数が出てきたので、そのあたりも勉強しつつ。 専門家とのことなので、きっとバッチリ動くんでしょうねー♪ 私ももっと勉強して、どんな処理でも作れるようになりたいです。 ありがとうございました。 またいつか私の質問を見かけたら、是非回答 宜しくお願いします!