按计数分组不提供正确的结果

时间:2020-12-20 15:52:25

标签: sql postgresql group-by

我有两张桌子:

enter image description here

enter image description here

我想要低于预期的输出:

enter image description here

我尝试了以下查询:

SELECT con.container_id, count( si.item_id) as shipment_item_count,
 count(distinct si.shipment_order_id) as shipment_order_count, 
 count(si.shipment_order_id) as total_number_of_shipment_item --- Here how to show total number of shipment_item
 from shipment_item_container con
 left join shipment_item si on si.item_id = con.shipment_item
 group by con.container_id;

但它显示如下输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

首先在 Shipment_item_container 内聚合,然后将结果加入 Shipment_item 和 aggrgate 的 2 个副本:

SELECT sic.Container_id, sic.Shipment_item_count,
       COUNT(DISTINCT si.Shipment_order_id) Shipment_order_ciount,
       COUNT(si.Shipment_order_id) Total_number_of_shipment_item
FROM (
  SELECT Container_id, Shipment_item, COUNT(*) Shipment_item_count 
  FROM Shipment_item_container 
  GROUP BY Container_id, Shipment_item
) sic
LEFT JOIN Shipment_item si ON si.Item_id = sic.Shipment_item
LEFT JOIN Shipment_item t ON t.Shipment_order_id = si.Shipment_order_id
GROUP BY sic.Container_id, sic.Shipment_item_count

参见demo
结果:

> container_id | shipment_item_count | shipment_order_ciount | total_number_of_shipment_item
> :----------- | ------------------: | --------------------: | ----------------------------:
> A            |                   2 |                     1 |                             4
> B            |                   1 |                     0 |                             0
相关问题