Mysql SQL:有条件和
我创建了一个查询,将一家公司的销售数据与其他公司进行比较 简化了,就像:Mysql SQL:有条件和,mysql,sql,laravel,eloquent,Mysql,Sql,Laravel,Eloquent,我创建了一个查询,将一家公司的销售数据与其他公司进行比较 简化了,就像: 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 合规性规则
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的行
现在,如何实现仅获取公司有销售数据的行?您应该使用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
您可以在
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
根据您的问题,假设公司为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
更新您的问题添加适当的数据样本和预期结果这不也会忽略其他公司没有销售的行吗?是的,我只是在再次输入案例时跳过了输入,但代码中的情况相同。@t-c:那么,您能否详细说明或编辑您的问题,并获得预期的良好结果?和一个相同的样本数据。因此,我可以更清楚地了解您到底需要什么。我不能在这里使用真实数据,但例如:1号公司售出10套,2号公司售出10套,但也退款10套,因此总计为0,3号公司没有此特定集合的任何数据。现在,如果我查询公司2,我应该收到0个销售,总共10个,但是对于公司3,不会返回结果(因此他们不会得到总数)@t-c:那么你的意思是说单位必须被视为销售,并且应该添加退款列,并且(销售-退款)数据不应该为零。如果为零,则应将其从查询中排除。