【问题标题】:subtraction between two queries with group by使用 group by 在两个查询之间进行减法
【发布时间】:2020-01-12 21:33:59
【问题描述】:

我使用 MariaDB 并有两个表(orders、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;

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

【问题讨论】:

  • 请提供样本数据和预期结果以阐明您的要求。
  • @PeterStrawson 您对我的回答提出的编辑会产生无效的 sql 代码。使用别名而不是完整的表名。

标签: mysql count aggregate-functions mariadb-10.3


【解决方案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 列,因为它们属于哪里并不明显,但您应该这样做。

【讨论】:

  • 现在它可以工作并产生正确的结果。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2019-01-06
  • 1970-01-01
相关资源
最近更新 更多