電子書籍の厳選無料作品が豊富!

こんにちは。
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
で出て欲しいです。
たとえばこの場合、場所によってなど出てしまうものでしょうか?
これはなぜなのでしょうか?
よろしくお願いします。

A 回答 (3件)

#2です。

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

この回答への補足

ありがとうございます。
できました!!
ありがとうございます。

ちなみになんですが
また別のテーブル(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.数

補足日時:2004/09/28 20:57
    • good
    • 0

group by a.ID ,b.名前



で、ちゃんと出力されると思います。
数をGroup byに含めると、集計されません。
    • good
    • 0

select ID ,名前 ,sum(数) from Aテーブル


where 日付 >= '0901' and 日付 <= '0901'
group by ID ,名前

では、ダメですか?

個数の合計だけなら結合は要らないと思いますが・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/28 20:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!