首页 > 解决方案 > 如何使用 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 。

标签: sqlhive

解决方案


我如何调整它来计算每个不同用户的支出,即:总和(美元)/计数(不同的人)

您可以使用:

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;

推荐阅读