使用 group by 的两个查询之间的减法

subtraction between two queries with group by

我使用 MariaDB 并有两个表(订单,invoiced_positions),我需要计算每件商品的发票数量和付款数量。所以我需要计算行数并按 item_name 分组。这样做的问题是一些项目被重新打开:所以我需要从没有的发票中减去重新打开的发票数量。基本上:我想为 所有 项目做我在这里只为一个项目取得的成就:

SELECT  
(SELECT COUNT(item_name = 'Streuselkuchen') 
 FROM orders, invoiced_positions 
 WHERE order_id = id AND reopened = 0)
 - (SELECT COUNT(item_name = 'Streuselkuchen') 
    FROM orders, invoiced_positions 
    WHERE order_id = id AND reopened != 0) AS Difference;

我认为这可以通过如图所示的条件聚合来实现,但我无法将其应用到我的特定任务中。

您需要 table 的适当 JOINGROUP BY item_name,然后是条件聚合:

SELECT item_name, SUM(reopened = 0) - SUM(reopened != 0) AS Difference
FROM orders AS O INNER JOIN invoiced_positions AS IP  
ON IP.order_id = O.id     
GROUP BY item_name;    

我没有用 table 别名限定 item_namereopened 列,因为它们所属的位置并不明显,但您应该这样做。