我有以下数据表名为" animal"我希望根据动物的克隆版本排名和分组。
Animal Clone_Version
dog 0
dog 0
dog 1
dog 2
dog 2
我尝试使用以下代码,但它缺少我正在寻找的分组方面。因为这是它的回报。
select
x.animal
, x.clone_version
, row_number() over(partition by x.clone_version order by animal desc)
from animal x
这就是上面的代码返回的内容。
Animal Clone_Version RankGroup
dog 0 2
dog 0 1
dog 1 1
dog 2 2
dog 2 1
我想通过分组对这些进行排名,因此输出将是以下内容。
Animal Clone_Version RankGroup
dog 0 3
dog 0 3
dog 1 2
dog 2 1
dog 2 1
我是否需要在from子句中使用select语句,或者是否有某种方法可以重新配置row_number() over(partition by....order by...)
以允许分组?
答案 0 :(得分:0)
您需要DENSE_RANK
:
select
x.animal
, x.clone_version
, dense_rank()
over(partition by x.animal -- for each animal
order by clone_version desc) -- based on descending version
from animal x
但是如果你的克隆版本总是增加它,那就像:
select
x.animal
, x.clone_version
, MAX(clone_version)
over(partition by x.animal) - clone_version + 1
from animal x