我如何查询此案例?

时间:2013-02-03 12:22:50

标签: sql postgresql

我有三张桌子。

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

我的目标很简单,我想列出所有类别以及这些类别的项目数量加上这些特定类别的项目的销售商品数量作为行。

结果如下:

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

如何在PostgreSQL中查询。提前谢谢。

1 个答案:

答案 0 :(得分:3)

关键是在计算中间连接表中的行时使用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联接,没有项目的类别和具有销售额的项目仍会显示,但总数为零。