SQL,为每1000行添加相同的序列号

时间:2016-01-15 16:31:08

标签: python sql postgresql

我有一个表,我按每个用户的条目数量订购。然后我复制这个表中的值,我想给每1000行一个序号。因此,如果一个用户有2000个条目并且它是最高金额,那么他的条目得到值1和2(他的哪个条目得到1和哪个2无关紧要)。如果接下来的两个用户有501和499个条目,则所有条目的值都为3,依此类推。问题是我不知道从哪里开始,我已经看到了“选择顶级x”解决方案,但它在这里没有帮助。这就是我现在所拥有的,所以我需要插入“每1000个连续行”的条件,但我不知道应该在哪个方向搜索它。

cur.execute("SELECT * FROM table1 ORDER BY users_count DESC;")
dbrows = cur.fetchall()
conn.commit()
my_number = 1
for "every 1000 sequential rows" in dbrows:
    cur.execute("INSERT INTO table2 (users_count, number) VALUES (%s,%s)", (row[0],my_number))
    my_number += 1

1 个答案:

答案 0 :(得分:3)

为何选择Python?你可以在SQL INSERT / SELECT中这样做:

insert into table2 (users_count, number) 
select users_count, 
   ((row_number() 
     over (order by ORDER BY users_count DESC) - 1) / 1000) + 1 
from table1

这会创建一个序号,然后使用一些整数除法将相同的数字分配给1000行的组。