Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何质疑这个案子?_Sql_Postgresql - Fatal编程技术网

Sql 我如何质疑这个案子?

Sql 我如何质疑这个案子?,sql,postgresql,Sql,Postgresql,我有三张桌子 Category(id, name); Item(id, name, category); SoldItem(id, item, qty); 我的目标很简单,我想将所有类别加上这些类别的商品数量加上这些特定类别的商品的售出商品数量列为行 结果如下: Category | Item count | Item sold count ---------------------------------------- Food | 2 | 50 ---------

我有三张桌子

Category(id, name);
Item(id, name, category);
SoldItem(id, item, qty);
我的目标很简单,我想将所有类别加上这些类别的商品数量加上这些特定类别的商品的售出商品数量列为行

结果如下:

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

如何在PostgreSQL中查询此问题。提前感谢。

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

对不起,忘记添加了。计数(i.id)不显示实际数字,因为它受与特定项目相关的SoldItem中的行数的影响。@William oops-我遗漏了
distinct
。现在修好了。谢谢,谢谢!你一如既往地乐于助人。