假设我有一个看起来像这样的表:
+---+--------------+------+
|NUM| NAME |POINTS|
+-------------------------+
| 1 | Peter | 92 |
| 1 | Rose | 93 |
| 1 | Karl | 94 |
| 2 | Frank | 15 |
| 2 | Sarah | 16 |
+-------------------------+
主键是 NUM 和 NAME 的组合。
现在我想用他们的排名替换 POINTS 中的数字,每个数字从 1 开始。我想实际更新表格。
示例:
+---+--------------+------+
|NUM| NAME |POINTS|
+-------------------------+
| 1 | Peter | 3 |
| 1 | Rose | 2 |
| 1 | Karl | 1 |
| 2 | Frank | 1 |
| 2 | Sarah | 2 |
+-------------------------+
最好的方法是什么?
最佳答案
如果您想实际更改表中的值,可以使用 MERGE 语句:
merge into the_table t
using (
select num, name,
dense_rank() over (partition by num order by points) as rnk
from the_table
) x on (x.num = t.num and x.name = t.name)
when matched then update
set points = x.rnk;
如果您只想显示值,请单独使用内部选择:
select num, name,
dense_rank() over (partition by num order by points) as points,
from the_table
关于sql - 将列中的数值分别替换为列中其他值的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994041/