如何使用Presto SQL计算列中指定值占比并按国家分组聚合
Presto 实现需求的SQL方案
实现分为两步:
- 先按国家和ID分组,计算每个ID对应的delete操作占比
- 再按国家分组聚合,统计唯一ID数量,以及每个ID delete占比的平均值
具体SQL如下:
WITH id_level_stats AS ( SELECT country, ID, -- 计算单ID下delete类型的占比,乘1.0避免整数除法 COUNT_IF(type = 'delete') * 1.0 / COUNT(*) AS delete_ratio FROM 替换为你的实际表名 GROUP BY country, ID ) SELECT country, COUNT(DISTINCT ID) AS ID_cnt, ROUND(AVG(delete_ratio), 2) AS delete_perc FROM id_level_stats GROUP BY country
逻辑说明
COUNT_IF是Presto原生的条件计数函数,比写CASE WHEN更简洁,功能是统计满足type = 'delete'的记录数- 乘以
1.0是为了将整数运算转为浮点运算,避免整数除法得到0的错误结果 - 如果不需要保留两位小数,去掉
ROUND函数即可,调整第二个参数可以修改保留的小数位数
执行后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

