-1

我使用 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;

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

4

1 回答 1

1

您需要一个适当JOIN的表,GROUP 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;    

我没有限定列item_namereopened表别名,因为它们属于哪里并不明显,但你应该这样做。

于 2020-01-12T21:53:59.310 回答