SQL查询如何在所有返回行中同时返回dense_rank()及其最大值
实现方法
你可以通过窗口聚合的方式直接把dense_rank()的最大值追加到所有返回行,主流SQL引擎(PostgreSQL、SQL Server、BigQuery、Spark SQL等)支持直接嵌套窗口函数,不需要额外嵌套子查询:
select dense_rank() over(order by A.claim_id) as "Claim Count", max(dense_rank() over(order by A.claim_id)) over () as "Max Claim Count", A.person_cpr as "Unique member ID" from my_table as A
注意事项
- 追加列的
over ()代表窗口范围覆盖全部返回行,会自动计算所有行里dense_rank()结果的最大值,填充到每一行对应位置。 - 如果你使用的SQL引擎不支持窗口函数直接嵌套(比如部分低版本MySQL),可以用CTE先完成排名计算,再做窗口聚合:
with ranked_data as ( select dense_rank() over(order by A.claim_id) as "Claim Count", A.person_cpr as "Unique member ID" from my_table as A ) select *, max("Claim Count") over () as "Max Claim Count" from ranked_data
- 如果你需要按成员维度统计对应claim总数,只需要在
max()的over()子句中添加partition by person_cpr即可,按需调整窗口分区范围。
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

