- ベストアンサー
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 で出て欲しいです。 たとえばこの場合、場所によってなど出てしまうものでしょうか? これはなぜなのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。ちゃんと見ていなかったですが、正規化という意味では、Aテーブルに名前は要らないですね。もしくは、#1さんの言うとおり、JOINする必要はないですね。
その他の回答 (2)
- Samurai-Jack
- ベストアンサー率18% (130/697)
group by a.ID ,b.名前 で、ちゃんと出力されると思います。 数をGroup byに含めると、集計されません。
select ID ,名前 ,sum(数) from Aテーブル where 日付 >= '0901' and 日付 <= '0901' group by ID ,名前 では、ダメですか? 個数の合計だけなら結合は要らないと思いますが・・・
お礼
ありがとうございます。 IDと同じものを出したかったので結合にしたんですがしなくてもよかったようですね。
補足
ありがとうございます。 できました!! ありがとうございます。 ちなみになんですが また別のテーブル(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.数