sql - 如何使用 case when 和 distinct count 计算平均值?
问题描述
我的源表包含销售信息。每行都是一个人,并记录他们每次购物/在哪里购物。因此,我可以通过以下方式计算每个行业的平均交易价值:
select
industry,
COALESCE(AVG(CASE WHEN shopcode in (1,2,4) THEN dollar END), 0) AS avt
from sales
group by industry
但是我如何调整它来计算每个不同用户数量的支出,即:sum(dollar)/count(distinct person)
与上面非常相似,但不是sum/count(*) sum/count(distinct person)
......我也需要使用 coalesce 。
解决方案
我如何调整它来计算每个不同用户的支出,即:总和(美元)/计数(不同的人)
您可以使用:
select industry,
sum(dollar) / count(distinct person)
from sales
group by industry;
我不确定过滤的shop_code
目的是什么。它在您的查询中,但不是问题的一部分。如果您想为特定商店使用此功能,我建议将其移至一个where
子句:
select industry,
sum(dollar) / count(distinct person)
from sales
where shop_code in (1, 2, 4)
group by industry;
推荐阅读
- ruby-on-rails - How can I update two User objects in the same Rails form_for?
- angular - Firestore Angular 获取文档中的所有集合名称
- angular - 当我运行 ng serve 时找不到模块'@angular/compiler-cli/ngc'
- regex - Angular 验证器模式正则表达式,用于匹配一个或另一个规则,但不能同时匹配两者
- json - 使用 jq 连接多个文件中的 JSON 数组
- javascript - 按sharepoint 2013按组获取列表项
- api - 如何限制对 Google App Engine 的外部访问并仅允许 Apigee Edge?
- date - 日期的条件格式
- php - 除非清除 Cookie,否则登录页面会超时
- meteor - 启用汇总的 Meteor 1.9 构建中断