Oracle 重复排序
我正在使用Oracle Apex,并对通话速度进行排名。我几乎得到了我想要的结果。我所面临的唯一问题是,当rank函数遇到重复值时,默认情况下,它们都会被分配最低的秩。e、 gOracle 重复排序,oracle,Oracle,我正在使用Oracle Apex,并对通话速度进行排名。我几乎得到了我想要的结果。我所面临的唯一问题是,当rank函数遇到重复值时,默认情况下,它们都会被分配最低的秩。e、 g Rank Call Speed 1 65 2 72 3 92 4 102 4 102 4 102 4 102 4 102 9
Rank Call Speed
1 65
2 72
3 92
4 102
4 102
4 102
4 102
4 102
9 113
10 154
11 201
12 352
4代表8是复制品的最高等级吗
一种方法是使用排名降序,然后从最高排名+1中减去。这是可行的,但似乎是不必要的步骤
任何帮助都将不胜感激这是一件奇怪的事情,但我会这样做:
with data as (
select 65 call_speed from dual union all
select 72 call_speed from dual union all
select 92 call_speed from dual union all
select 102 call_speed from dual connect by level <= 5 union all
select 113 call_speed from dual union all
select 154 call_speed from dual union all
select 201 call_speed from dual union all
select 352 call_speed from dual
)
select
rank() over (order by call_speed) + count(*) over (partition by call_speed) - 1 rank,
call_speed
from data;
这是一件很奇怪的事情,但我会做如下事情:
with data as (
select 65 call_speed from dual union all
select 72 call_speed from dual union all
select 92 call_speed from dual union all
select 102 call_speed from dual connect by level <= 5 union all
select 113 call_speed from dual union all
select 154 call_speed from dual union all
select 201 call_speed from dual union all
select 352 call_speed from dual
)
select
rank() over (order by call_speed) + count(*) over (partition by call_speed) - 1 rank,
call_speed
from data;
这只是一个替代方案,完全没有理由,除了可能避免执行分区计数时的内存开销:
with data as (
select 65 call_speed from dual union all
select 72 call_speed from dual union all
select 92 call_speed from dual union all
select 102 call_speed from dual connect by level <= 5 union all
select 113 call_speed from dual union all
select 154 call_speed from dual union all
select 201 call_speed from dual union all
select 352 call_speed from dual
)
select
count(*) over () + 1 - rank() over (order by call_speed desc) rank,
call_speed
from data
order by call_speed;
这只是一个替代方案,完全没有理由,除了可能避免执行分区计数时的内存开销:
with data as (
select 65 call_speed from dual union all
select 72 call_speed from dual union all
select 92 call_speed from dual union all
select 102 call_speed from dual connect by level <= 5 union all
select 113 call_speed from dual union all
select 154 call_speed from dual union all
select 201 call_speed from dual union all
select 352 call_speed from dual
)
select
count(*) over () + 1 - rank() over (order by call_speed desc) rank,
call_speed
from data
order by call_speed;
什么时候排名1不被认为是最高的?在现实世界中,传统的做法是将较高的等级授予捆绑价值观。你真的希望他们都是8,还是4,5,6,7,8,如果你没有办法打破平局的话,他们是半随机分配的?将现有查询和示例数据作为文本而不是图像包含通常会有所帮助。图像更难用于重现您的问题。我可以看到您来自何方,但在呼叫中心环境中,我们不想告诉一组5人,他们处理时间相同,a的排名高于b、c、d、e。我们想反映出他们是平等的,但是我们希望他们有更高的结果。好吧,那么就不要排高,只是检查一下。为什么说他们都是第八名而不是第四名更好?只是好奇…排名4意味着只有3个人比你快。当排名1不是一般认为最高吗?在现实世界中,传统的做法是将较高的等级授予捆绑价值观。你真的希望他们都是8,还是4,5,6,7,8,如果你没有办法打破平局的话,他们是半随机分配的?将现有查询和示例数据作为文本而不是图像包含通常会有所帮助。图像更难用于重现您的问题。我可以看到您来自何方,但在呼叫中心环境中,我们不想告诉一组5人,他们处理时间相同,a的排名高于b、c、d、e。我们想反映出他们是平等的,但是我们希望他们有更高的结果。好吧,那么就不要排高,只是检查一下。为什么说他们都是第八名而不是第四名更好?只是好奇…排名4意味着只有3个人比你快。这太完美了。非常感谢你这太完美了。多谢各位