首页 > 解决方案 > SQL:有条件的 SUM

问题描述

我建立了一个查询来比较一家公司与其他公司的销售统计数据。

简化,就像:

SELECT SUM(CASE WHEN company=foobar THEN sales ELSE 0) as sales_foobar,
SUM(sales) as sales_total, country, year, product FROM sales_table
GROUP BY country, year, product HAVING (the above sum again) > 0

合规性规则要求仅显示公司有销售的行,而我的代码将丢弃 foobar 没有销售的行,但由于订单和退款相等,它也会删除销售额为 0 的行。

现在,我怎样才能只获得公司有销售数据的行?

标签: mysqlsqllaraveleloquent

解决方案


HAVING您可以在子句中计算与公司匹配的行数:

SELECT SUM(CASE WHEN company = foobar THEN sales ELSE 0 END) as sales_foobar,
       SUM(sales) as sales_total, country, year, product
FROM sales_table
GROUP BY country, year, product
HAVING SUM( company = foobar ) > 0;  -- there is at least one record for the company

推荐阅读