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”,依此类推。
我有一个 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”,依此类推。