Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL,每1000行添加相同的序列号_Python_Sql_Postgresql - Fatal编程技术网

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

Python SQL,每1000行添加相同的序列号,python,sql,postgresql,Python,Sql,Postgresql,我有一个表,我按每个用户的条目数量排序。然后我复制这个表中的值,我想给每1000行一个序列号。因此,如果一个用户有2000个条目,并且数量最高,那么他的条目将得到值1和2(他的条目中的哪个条目得到1和哪个条目得到2并不重要)。如果接下来的两个用户有501和499个条目,那么他们的所有条目都会得到值3,依此类推。问题是,我不确定从哪里开始,我已经看到了“选择top x”解决方案,但它在这里没有帮助。这就是我现在所拥有的,所以我需要插入一个“每1000个连续行”的条件,但我不知道应该搜索哪个方向 c

我有一个表,我按每个用户的条目数量排序。然后我复制这个表中的值,我想给每1000行一个序列号。因此,如果一个用户有2000个条目,并且数量最高,那么他的条目将得到值1和2(他的条目中的哪个条目得到1和哪个条目得到2并不重要)。如果接下来的两个用户有501和499个条目,那么他们的所有条目都会得到值3,依此类推。问题是,我不确定从哪里开始,我已经看到了“选择top 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

为什么是Python?您可以在SQL插入/选择中这样做:

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行的组。

为什么选择Python?您可以在SQL插入/选择中这样做:

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行的组