• ベストアンサー

SQLのsum関数

こんにちは。 PostgresのSQLが思うように動いてくれません!! そのIDを持っている人がどのくらいの数を持っているのかを抽出したいのです。 テーブルは下記です。 ********************************************* ★Aテーブル ID  名前  数  場所  日付 0001 みかん 1  冷蔵庫 0901 0001 みかん 4  倉庫  0901 0001 みかん 1  冷蔵庫 0901 0002 いちご 1  部屋  0901 0002 いちご 2  部屋  0801 0003 きのこ 6  倉庫  0901 ★Bテーブル ID  名前 0001 みかん 0002 いちご 0003 きのこ 0004 あいす ********************************************* となっている場合、下記SQLを実行すると select a.ID ,b.名前 ,sum(a.数) as 数 from Aテーブル a,Bテーブル b where a.日付 >= '0901' and a.日付 <= '0901' and a.ID = b.ID group by a.ID ,b.名前, a.数 結果が 0001 みかん 2 0001 みかん 4 0002 いちご 1 0002 いちご 2 となり0001は合計6で出て欲しいのに別々に出てしまいます。 理想では 0001 みかん 6 0002 いちご 3 で出て欲しいです。 たとえばこの場合、場所によってなど出てしまうものでしょうか? これはなぜなのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#2です。ちゃんと見ていなかったですが、正規化という意味では、Aテーブルに名前は要らないですね。もしくは、#1さんの言うとおり、JOINする必要はないですね。

jun2249
質問者

補足

ありがとうございます。 できました!! ありがとうございます。 ちなみになんですが また別のテーブル(CテーブルにはAテーブルと同じような内容)がある場合にsumを使わずに+で足しても先に質問したように同じIDのものが何個か出ていました。 どこがまずいですか? これだとgroup byに数をいれないとエラーになっていました。 select ID ,名前 ,a.数 + c.数 as 数 from Aテーブル a,Cテーブル c where 日付 >= '0901' and 日付 <= '0901' group by ID ,名前,a.数,c.数

その他の回答 (2)

回答No.2

group by a.ID ,b.名前 で、ちゃんと出力されると思います。 数をGroup byに含めると、集計されません。

noname#38849
noname#38849
回答No.1

select ID ,名前 ,sum(数) from Aテーブル where 日付 >= '0901' and 日付 <= '0901' group by ID ,名前 では、ダメですか? 個数の合計だけなら結合は要らないと思いますが・・・

jun2249
質問者

お礼

ありがとうございます。 IDと同じものを出したかったので結合にしたんですがしなくてもよかったようですね。

関連するQ&A