将记录分组 - 快速解决方案

use*_*736 3 random postgresql select grouping sequence

我需要将UPDATEPostgreSQL表中的命令行(从subselect中选择)分成组,这些组将在其中一列中用整数值标识.这些组的大小应相同.源表包含数十亿条记录.

例如,我需要将213个选定的行分成组,每组应包含50个记录.结果将是:

  • 1 - 50. row => 1
  • 51 - 100. row => 2
  • 101 - 150. row => 3
  • 151 - 200. row => 4
  • 200 - 213. row => 5

使用一些循环(或使用PostgreSQL窗口函数)没有问题,但我需要非常有效和快速地完成它.我不能在id中使用序列,因为这些ID中应该存在间隙.

我有一个想法是使用随机整数生成器并将其设置为行的默认值.但是当我需要调整组大小时,这是不可用的.

Ric*_*ton 5

下面的查询应显示213行,组号从0到4.如果你想1-5,只需加1

SELECT i, (row_number() OVER () - 1) / 50 AS grp 
FROM generate_series(1001,1213) i 
ORDER BY i;
Run Code Online (Sandbox Code Playgroud)