在Oracle中选择N行

在Oracle中选择N行,oracle,rank,dense-rank,Oracle,Rank,Dense Rank,假设我们有以下数据: Key Value Desired Rank --- ----- ------------ P1 0.6 2 P1 0.6 2 P1 0.6 2 P2 0.8 1 P2 0.8 1 P3 0.6 3 P3 0.6 3 我想选择按值描述排序的不同键以显示在支

假设我们有以下数据:

Key Value Desired Rank
--- ----- ------------
P1    0.6            2    
P1    0.6            2    
P1    0.6            2    
P2    0.8            1
P2    0.8            1
P3    0.6            3
P3    0.6            3
我想选择按值描述排序的不同以显示在支持分页的网格中


我不知道如何生成秩作为所需秩列中显示的值。这样我就可以在数据集上正确分页

当我尝试使用:densed_RANK()OVER(ORDER BY value)时,结果是

Key Value   DENSE_RANK() OVER(ORDER BY value)
--- ----- ------------
P1    0.6            2    
P1    0.6            2
P1    0.6            2    
P2    0.8            1
P2    0.8            1
P3    0.6            2    
P3    0.6            2
当我尝试选择前两个键“排名在1和2之间”时,我会收到3个键。这会破坏所需的分页机制

有什么想法吗


谢谢

如果您想要不同的键和值,为什么不使用不同的

select distinct
  t.Key,
  t.Value
from
  YourTable t
order by
  t.value
你真的需要军衔吗

如果你这样做了,你仍然可以

select distinct
  t.Key,
  t.Value,
  dense_rank() over () order by (t.Value, t.Key) as Rank
from
  YourTable t
order by
  t.value
这项工作没有明显的,以及

'当我尝试选择前两个时 我收到的密钥“排名在1和2之间” 退3把钥匙。”

这是因为您只是按值排序,所以具有相同值的所有键都被分配相同的秩。因此,您需要在ordering子句中包含键。像这样:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  

“我不知道如何生成显示在所需秩列中的值的秩。”我也不知道。你说你希望它们按值降序排列(这是第二组数据提供的)。你能举一些例子说明每个键(“P1”、“P2”…)有不同的值,以及在这些情况下你期望得到什么吗?谢谢,我通过以下方法得到了期望的结果:稠密排列()覆盖(按值排序DESC,键ASC),因此行按值排序显示。如果相等,则键决定顺序