如何在Databricks中实现Oracle的max(column_a) keep语法?
Oracle的MAX() KEEP(DENSE_RANK)在Databricks SQL中的等价写法
原Oracle SQL的作用是:按id分组,在每个分组内先筛选出column_b值最大的所有行,再从这些行中取column_a的最大值。
Databricks SQL没有直接对应Oracle MAX() KEEP(DENSE_RANK...)的语法,但可以通过窗口函数DENSE_RANK()结合子查询实现完全等价的逻辑,代码如下:
SELECT id, MAX(column_a) AS column_a_max FROM ( SELECT id, column_a, column_b, -- 按id分组,column_b降序排名,排名1的是column_b最大的行 DENSE_RANK() OVER (PARTITION BY id ORDER BY column_b DESC) AS rnk FROM your_table ) t WHERE rnk = 1 GROUP BY id;
逻辑说明
- 子查询中通过
DENSE_RANK()窗口函数,给每个id分组内的行按column_b降序分配排名,排名为1的行就是该分组内column_b值最大的所有行。 - 外层查询过滤出排名为1的行,再按
id分组计算column_a的最大值,和原Oracle语句的逻辑完全一致。
内容的提问来源于stack exchange,提问作者John Al
相关产品推荐
相关产品推荐

