我有一个表,我按每个用户的条目数量订购。然后我复制这个表中的值,我想给每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
答案 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行的组。