• 締切
  • すぐに回答を!

group by句

  • 質問No.5456511
  • 閲覧数168
  • ありがとう数1
  • 回答数2

お礼率 77% (162/210)

色々と試行錯誤してやっていますが、なかなか自分の
思うような結果が得られないためご質問させて下さい。
テーブルが全部で3つあります。

テーブルA
id name
1 巨人
2   西武

テーブルB
id name
1 小笠原
2 ラミレス
3 中島
4  片岡

テーブルC
id テーブルAID テーブルBID 背番号
1 1 1 30
2 1 2 10
3 2 3 3
4 2 4 8

テーブルを結合し、テーブルCにある
背番号をテーブルAid,テーブルBidを元に
sumしたいのですがうまくいきません。
以下がそのSQLになります。

(1)サブクエリーを使ったSQL
この場合値が重複されて表示されてしまいます。
select a.name,b.name,c.name,
(select sum(背番号) from tableC c
where c.テーブルAId = a.id
group by c.テーブルAid
),
(select sum(背番号) from tableC c
where c.テーブルBid = bid
group by c.テーブルBid
)
from tableC c
inner join tableA a on a.id = c.テーブルAid
inner join tableB b on b.id = c.テーブルBid

(2) select a.name,b.name,c.name,
(select sum(背番号) from tableC c
where c.テーブルAId = a.id
),
(select sum(背番号) from tableC c
where c.テーブルBid = bid
)
from tableC c
inner join tableA a on a.id = c.テーブルAid
inner join tableB b on b.id = c.テーブルBid
group by c.テーブルAid

重複はされないのですが、group byが一つのみなので
ちゃんとした出力がされません。

   他にやり方があるのかもしれませんが、お分かりになる方が
   いらっしゃいましたら、ご教授お願い致します。

回答 (全2件)

  • 回答No.2

ベストアンサー率 61% (21/34)

a.name  b.name 背番号
------------------------------------------------------------
巨人      小笠原    30
巨人      ラミレス   10
西武      中島     3
西武      片岡     8

求めているのは上記のような形でしょうか?

>テーブルを結合し、テーブルCにある
>背番号をテーブルAid,テーブルBidを元に
>sumしたいのですがうまくいきません。

この場合、データをsumする必要はありません。
[SQL]
select
  a.name
  ,b.name
  ,c.背番号
from
  tableC c
  join  tableA a
  on   a.id = c.tableAid
  join  tableB b
  on   b.id = c.tableBid

3テーブルの結合で躓いた…?
って思っては見たものの結合条件はあっているから
そうではなさそうですね。

もしかして3次元的な集計をしようとしているのでしょうか?
補足情報を求めます。
お礼コメント
NeilMania

お礼率 77% (162/210)

ご連絡遅くなりました。
プログラムでやるようにしました。
ありがとうございました。
投稿日時:2009/12/06 21:37
  • 回答No.1

ベストアンサー率 43% (833/1926)

>テーブルCにある背番号をテーブルAid,テーブルBidを元にsumしたい

どういう結果を得たいのか、提示できませんか?
使用しているのは、ここのカテゴリ通りMySQLですか?
バージョンは?
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ