AWS Athena中如何获取每个唯一条目Top N行且不返回rn列?
解决AWS Athena中分组取Top N的简洁写法
针对你的需求,这里提供两种简洁的写法,避免子查询返回冗余的rn列:
1. 用QUALIFY子句(最简洁)
Athena支持QUALIFY语法,可以直接在主查询中过滤窗口函数的结果,无需嵌套子查询或CTE:
SELECT col1, query, score FROM your_table_name QUALIFY ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY score DESC) <= 2 ORDER BY col1, score DESC;
这种写法直接筛选出每个col1分组内按score降序排名前2的行,同时只返回你需要的三列,完全不会出现rn列。
2. 用CTE(结构更清晰)
如果需要更清晰的逻辑拆分,可以用公共表表达式(CTE)把排名逻辑单独抽离:
WITH ranked_data AS ( SELECT col1, query, score, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY score DESC) AS rn FROM your_table_name ) SELECT col1, query, score FROM ranked_data WHERE rn <= 2 ORDER BY col1, score DESC;
CTE让排名逻辑和最终筛选分离,可读性更强,后续如果要扩展逻辑也更方便,同样不会返回rn列。
内容的提问来源于stack exchange,提问作者Belphegor21
相关产品推荐
相关产品推荐

