如何在Presto/AWS Athena中合并两个分组时间序列查询结果
在Presto/AWS Athena中合并过滤与未过滤的月度统计结果
嘿,这个问题我熟!你不需要搞复杂的表关联,用条件聚合就能一步到位,而且性能比关联两张表好得多。核心思路是在同一个查询里,用CASE WHEN分别统计过滤和未过滤的distinct id数量,再按年月分组。
解决方案SQL代码
SELECT -- 生成YYYY-MM格式的年月字符串,替换event_date为你的日期列名 format_date('%Y-%m', date_trunc('month', event_date)) AS month_year, -- 统计value='bla'时的distinct id数量,不符合条件的id会被转为NULL,COUNT(DISTINCT)自动忽略NULL COUNT(DISTINCT CASE WHEN value = 'bla' THEN id END) AS filtered_ids, -- 直接统计所有distinct id数量 COUNT(DISTINCT id) AS unfiltered_ids FROM your_table_name -- 替换为你的表名 GROUP BY month_year ORDER BY month_year; -- 按年月排序,保证时间序列的顺序
结果说明
执行这个查询后,你会得到完全符合预期的结果格式:
| filtered_ids | unfiltered_ids | month_year |
|---|---|---|
| 6 | 15 | 2020-06 |
| 10 | 10 | 2020-07 |
| 10 | 20 | 2020-08 |
额外提示
如果你的日期列不是标准日期类型(比如是字符串),可以先用parse_date函数转换:
format_date('%Y-%m', date_trunc('month', parse_date('%Y-%m-%d', date_string_column))) AS month_year
根据你的实际日期格式调整parse_date的格式参数即可。
内容的提问来源于stack exchange,提问作者oblio
相关产品推荐
相关产品推荐

