2

私は3つのテーブルを持っています。

Category(id, name);
Item(id, name, category);
SoldItem(id, item, qty);

私の目標は単純です。すべてのカテゴリと、それらのカテゴリのアイテム数と、それらの特定のカテゴリのアイテムの販売アイテム数を行としてリストしたいと考えています。

結果は次のようになります。

Category | Item count | Item sold count
----------------------------------------
Food     | 2          | 50
----------------------------------------
Beverage | 3          | 60

PostgreSQL でこれを照会するにはどうすればよいですか。前もって感謝します。

4

1 に答える 1

2

重要なのはcount(distinct)、中央の結合テーブルから行をカウントするときに使用することです。そうしないと、複数の孫が同じ特許を複数回カウントすることになります。

select
    c.name as category,
    count(distinct i.id) as item_count,
    sum(si.qty) as item_sold_count
from Category c
left join Item i on i.category = c.id
left join SoldItem si on si.item = i.id
group by c.name;

結合を使用することによりleft、アイテムのないカテゴリ、および売上のあるアイテムは引き続き表示されますが、合計はゼロになります。

于 2013-02-03T12:34:56.087 に答える