使用 keep dense_rank 查找单个值
Use of keep dense_rank to find a single value
我的查询是这样的:
select
name,
color,
min(age) keep (dense_rank first order by priority asc) as age
from
myTable
group by
name,
color
我了解 rank 和 dense_rank 将 return "duplicate" 分区中的值。就我而言,如果 2 个年龄段共享优先级。
那么这条线会做什么:
min(age) keep (dense_rank first order by priority asc) as age
它会选择给定名称、颜色和 return 相应年龄优先级最低的行吗?如果有两行具有相同的优先级,它会随机选择其中一行吗?
在您的示例中,如果列表中的第一个优先级有多个关联的年龄值,则由 min(age)
决定显示哪个。如果您想要显示最高年龄而不是最低年龄,可以将其换成 max(age)
。
对于给定的姓名和颜色,它将查找优先级最低的行,并在这些行中查找年龄最小的行。看到这个,从你的例子中很清楚填充了一些数据
我的查询是这样的:
select
name,
color,
min(age) keep (dense_rank first order by priority asc) as age
from
myTable
group by
name,
color
我了解 rank 和 dense_rank 将 return "duplicate" 分区中的值。就我而言,如果 2 个年龄段共享优先级。
那么这条线会做什么:
min(age) keep (dense_rank first order by priority asc) as age
它会选择给定名称、颜色和 return 相应年龄优先级最低的行吗?如果有两行具有相同的优先级,它会随机选择其中一行吗?
在您的示例中,如果列表中的第一个优先级有多个关联的年龄值,则由 min(age)
决定显示哪个。如果您想要显示最高年龄而不是最低年龄,可以将其换成 max(age)
。
对于给定的姓名和颜色,它将查找优先级最低的行,并在这些行中查找年龄最小的行。看到这个,从你的例子中很清楚填充了一些数据