使用keep-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将在分区中返回"重复"值。在我的情况下,如果两个年龄段的人共享优先权。

那么这条线路会做什么:

  min(age) keep (dense_rank first order by priority asc) as age

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

在您的示例中,如果列表中的第一个优先级有多个相关联的年龄值,则由min(age)决定显示哪一个。如果你想显示最高年龄,而不是最低年龄,你可以把它换成max(age)

对于给定的名称和颜色,它将找到优先级最低的行,并在这些行中找到最低的年龄。看到这个,从你的例子中可以很清楚地看到一些数据

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

最新更新