SQL:HAVING条件SUM

问题描述 投票:1回答:3

我已经构建了一个查询,将公司的销售统计数据与其他公司进行比较。

简化,就像:

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,它们也会丢弃。

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

mysql sql laravel eloquent
3个回答
2
投票

您可以在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

0
投票

你应该使用Where:

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

0
投票

根据你的问题,假设公司='foobar;您几乎只在代码中完成了答案。因此,如果您需要除此之外的任何其他特定标准,请告知我们。我会编辑答案。

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 (CASE WHEN company='foobar' THEN sales ELSE 0 end) > 0

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.