使用keep dense_rank来查找单个值

时间:2015-02-18 22:09:33

标签: sql oracle dense-rank

我的查询类似于:

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

它会为给定的名称,颜色选择一个具有最小优先级的行,并返回相应的年龄吗?如果有两个具有相同优先级的行,它是否会随机选择其中一行?

2 个答案:

答案 0 :(得分:3)

在您的示例中,如果列表中的第一个优先级具有与之关联的多个年龄值,则min(age)确定要显示哪个年龄值。如果您希望显示最高年龄而不是最低年龄,则可以将其替换为max(age)

答案 1 :(得分:3)

对于给定的名称和颜色,它将找到具有最低优先级的行,在这些行中,它将找到最低年龄。看到这一点,从填充了一些数据的示例中可以清楚地看出

http://sqlfiddle.com/#!4/3d765f/2