Athena按分组取唯一行避免Group BY聚合重复计数的实现方法
问题解决方法
原因说明
出现重复计数的核心原因是:同一个分组(app_id + location_id)下存在多行符合过滤条件的记录,如果用SUM(execution_count)做聚合,会把同一分组所有行的execution_count值累加,自然会出现翻倍的结果。
方案1:普通GROUP BY聚合(推荐,性能更优)
因为同一分组下的execution_count值是固定的,不需要求和,直接用MAX/MIN取任意一行的该字段值即可:
SELECT app_id, location_id, MAX(execution_count) AS execution_count, -- 对应你示例输出的三个相同数值,可根据实际业务逻辑调整规则 MAX(execution_count) AS ru_today_stat, MAX(execution_count) AS ru_this_week_stat, MAX(execution_count) AS ru_this_month_stat FROM 你的表名 -- 按你的需求调整过滤条件,示例数据中c全部为FALSE,可按需修改 WHERE a = TRUE AND b = TRUE AND c = TRUE GROUP BY app_id, location_id;
方案2:窗口函数去重后统计
如果要使用WINDOW语法实现,可以先给每个分组内的行编号,取第一行再统计:
WITH 分组去重表 AS ( SELECT *, -- 按分组维度分区,行号从1开始排序 ROW_NUMBER() OVER (PARTITION BY app_id, location_id ORDER BY date_partition DESC) AS row_num FROM 你的表名 WHERE a = TRUE AND b = TRUE AND c = TRUE ) SELECT app_id, location_id, execution_count, execution_count AS ru_today_stat, execution_count AS ru_this_week_stat, execution_count AS ru_this_month_stat FROM 分组去重表 -- 每个分组只取第一行,避免重复 WHERE row_num = 1;
内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

