使用 keep dense_rank 查找单个值
Posted
技术标签:
【中文标题】使用 keep dense_rank 查找单个值【英文标题】:Use of keep dense_rank to find a single value 【发布时间】:2015-04-20 02:53:54 【问题描述】:我的查询是这样的:
select
name,
color,
min(age) keep (dense_rank first order by priority asc) as age
from
myTable
group by
name,
color
我了解 rank 和 dense_rank 将在分区中返回“重复”值。就我而言,如果优先级在 2 个年龄段之间共享。
那么这条线会做什么:
min(age) keep (dense_rank first order by priority asc) as age
它会为给定的名称、颜色选择优先级最低的行并返回相应的年龄吗?如果有两个具有相同优先级的行,它会随机选择其中一个行吗?
【问题讨论】:
【参考方案1】:在您的示例中,如果列表中的第一个优先级具有与其关联的多个年龄值,则由 min(age)
确定要显示哪个值。如果您希望显示最高年龄而不是最低年龄,可以将其换成 max(age)
。
【讨论】:
【参考方案2】:对于给定的名称和颜色,它将查找优先级最低的行,并在这些行中查找最低年龄。看到这个,从你的例子中很清楚地填充了一些数据
http://sqlfiddle.com/#!4/3d765f/2
【讨论】:
以上是关于使用 keep dense_rank 查找单个值的主要内容,如果未能解决你的问题,请参考以下文章
SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
将 Oracle 查询中的 keep dense_rank 转换为 postgres
SQL Keep(dense_rank last order by)到 H2 数据库
使用 hive 中的 rank/dense_rank 查找每个部门的第二高薪水
SQL开发实战技巧系列(十五):查找最值所在行数据信息及快速计算总和百之max/min() keep() over()fisrt_valuelast_valueratio_to_report