You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:06:05