Sql:在循环中为重复项添加一个包含整数的列

Sql: add a column with integers in a loop for duplicates

我有一个 sql table 喜欢:

ID   Name     Balance
1    Peter    324.5
2    Michael  122.7
3    Peter    788.3
4    Mark     45.7
5    Ralph    333.5
6    Thomas   563.2
7    Ralph    9685.1
8    Peter    2444.5
9    Susi     35.2
10   Andrew   442.5
11   Susi     2424.8

是否可以在 sql 中编写一个 while 循环,您可以在其中为每个重复的名称(3 次 Peter, 2 次苏西,2 次拉尔夫)?对于非重复名称,它的值应为 0。

所以最后的 table 应该是这样的:

ID   Name     Balance   Value
1    Peter    324.5     1
2    Michael  122.7     0
3    Peter    788.3     1
4    Mark     45.7      0
5    Ralph    333.5     2
6    Thomas   563.2     0
7    Ralph    9685.1    2
8    Peter    2444.5    1
9    Susi     35.2      3
10   Andrew   442.5     0
11   Susi     2424.8    3

你不想为此使用 while 循环。只需使用 window 个函数:

select t.*, count(*) over (partition by name) as cnt
from t;

这提供了每个名称的总数。如果你想要一个增量值,你可以使用 row_number():

select t.*, row_number() over (partition by name order by id) as seqnum
from t;

这将枚举每个名称的行,因此每个名称的值都是“1”,有些名称的值是“2”,依此类推。