mysql - 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 的行。
现在,我怎样才能只获得公司有销售数据的行?
解决方案
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
推荐阅读
- java - 如何在 Evosuite 测试生成时获得更多(所有)极端案例?
- r - 使用 R 在另一个之下绘制多个时间序列
- corda - Corda 不会在非开发模式下加载我的 cordapp
- amazon-web-services - ELB 和 CloudFront:我可以在 CloudFront 上保留一些文件夹,在 EC2 上保留其他文件夹吗?
- c# - 如何检查和转换 IEnumerable 值以显示在视图中?
- mysql - 试图了解 Rails 测试的工作原理并遇到模型问题
- apache-spark - io.fabric8.kubernetes.client.KubernetesClientException 消息:无法解析需求:标签值无效
- javascript - 如何在ngFor中绑定一个输入框
- python - 这里需要 numpy.asarray() 吗?
- python - 正则表达式只提取一个单词