2

我有三张桌子。

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 回答