我得到一个大约7万行的数据集,现在我想将这个表拆分为三个具有确切行数(代码是在SAS中应用的fisrt,现在转移到postgresql),一个来自1-5000,两个来自5001-25000,最后一个与其余行,其中任何一行都没有重复的行。 像:
+--------+-----+--------+-----+
| cst_id | age | salary | sex |
+--------+-----+--------+-----+
| 1 | 44 | 2000 | M |
| 2 | 23 | 3000 | F |
| 3 | 34 | 4000 | M |
| 4 | 51 | 5000 | M |
| 5 | 26 | 6000 | F |
| 6 | 28 | 7000 | F |
| 7 | 39 | 8000 | M |
+--------+-----+--------+-----+
最后我想要三个表格,其中包含我指定的确切行数(例如3rows-2rows-rest rows),它们都是distinct.like: 表1:
+--------+-----+--------+-----+
| cst_id | age | salary | sex |
+--------+-----+--------+-----+
| 1 | 44 | 2000 | M |
| 2 | 23 | 3000 | F |
| 3 | 34 | 4000 | M |
+--------+-----+--------+-----+
表2:
+--------+-----+--------+-----+
| cst_id | age | salary | sex |
+--------+-----+--------+-----+
| 4 | 51 | 5000 | M |
| 5 | 26 | 6000 | F |
+--------+-----+--------+-----+
表3:
+--------+-----+--------+-----+
| cst_id | age | salary | sex |
+--------+-----+--------+-----+
| 6 | 28 | 7000 | F |
| 7 | 39 | 8000 | M |
+--------+-----+--------+-----+
如何使用postgresql来完成此操作?
答案 0 :(得分:0)
您可以将此过程分解为一个功能步骤。
希望这有帮助。
答案 1 :(得分:0)
有一个窗口函数“ NTILE”可以做到这一点:
-添加一个col来帮助拆分
将临时表help_table创建为
选择*
,NTILE(3)OVER(ORDER BY cat_id)as batch_nbr
从your_table;
创建表_1为 从help_table中选择*,其中batch_nbr = 1;
创建table_2为 从help_table中选择*,其中batch_nbr = 2;
创建table_3为 从help_table中选择*,其中batch_nbr = 3;