如何使用多组行的数字更新列?

Posted

技术标签:

【中文标题】如何使用多组行的数字更新列?【英文标题】:How to update column with numbers for multiple sets of rows? 【发布时间】:2014-06-25 07:15:31 【问题描述】:

我有一个超过 500.000 行的表。这就是我需要的 - 对于每 1000 行,我需要将列值更新为从 1 开始的序号。例如下表:

ID      | NAME  | EMAIL         | PHONE      | FLAG
1       | Peter | pete@mail.com | 12345678   |
.
.
.
.
500000  | Josef  | jos@mail.com | 987654321  |

所以对于前 1000 行,我需要列 FLAG 的值为 1,接下来的 1000 行 2 等等,最后一组 1000 行或少于 1000 行的下一个序列号

我需要的最终输出如下:

ID      | NAME  | EMAIL         | PHONE      | FLAG
1       | Peter | pete@mail.com | 12345678   |  1
.
.
1000    | Sashi | sash@mail.com | 2353553    |  1
1001    | Veer  | veer@mail.com | 33453453   |  2 
.
.
2000    | Ash   | ash@mail.com  | 235427127  |  2
.
.
499001  | Duster| dust@mail.com | 3434343    | 500
500000  | Josef  | jos@mail.com | 987654321  | 500
.
.

我可以写这个查询

update table
set flag = 1
where rownum <= 1000 and flag is null;

上述查询需要手动花费大量时间。无论如何我可以使用某种 for 循环来执行此操作或任何更好的查询。我希望我的问题很清楚。

【问题讨论】:

【参考方案1】:

试试这个:

update table
   set flag = trunc((id - 1) / 1000) + 1;

【讨论】:

以上是关于如何使用多组行的数字更新列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用分析窗口 SQL 函数在同一数据集的多组行中查找 id 值

对表格进行排序,但将多组行放在一起

如何使用spring data mongo更新所有行的特定列

如何更新除该组中最新项目之外的一组行

如何根据列中的一组行对数据框进行排名?

Spark将多组行过滤为单行