Psycopg2 - 返回前 1000 个结果并随机选择一个
Posted
技术标签:
【中文标题】Psycopg2 - 返回前 1000 个结果并随机选择一个【英文标题】:Psycopg2 - return first 1000 results and randomly pick one 【发布时间】:2013-07-02 14:15:20 【问题描述】:您好,我有一个包含 270 万条记录的 postgresql“TABLE1”。每条记录都有一个字段“FIELD1”,该字段可能为空,也可能有数据。我想要一个 SELECT 语句或方法,它 a) 从 TABLE1 返回前 1000 个结果,其中 FIELD1 为空,b) 随机选择一个记录以返回到 python 变量。救命???
【问题讨论】:
这个问题可能是相关的:***.com/questions/8674718/… 你需要定义:“空”,“第一”,你的要求(速度?重复使用?)。请提供表定义。 【参考方案1】:要选择前 1000 个结果,您可以在查询中使用限制
SELECT field1 FROM table1 ORDER BY id Limit 1000;
结果将是 python 中的列表。所以可以使用pythonrandom模块对结果列表进行操作。
【讨论】:
postgresql如何选择1000?是按主键号的顺序吗?如果是,如何获得 1000 条随机记录? 您也可以在查询中添加 ORDER BY 子句。我已经编辑了我的答案。默认 order by 必须是主要 id,但并不总是保证被订购。【参考方案2】:如果性能不是问题:
SELECT *
FROM (
SELECT *
FROM tbl
WHERE field1 IS NULL
ORDER BY id --?? unclear from question
LIMIT 1000
) sub
ORDER BY random()
LIMIT 1;
这会从“前”1000 个空行中返回 1 个完全随机的行。
“空”表示NULL
,“第一”表示最小的id
。
如果性能是一个问题,您需要更加具体。 如果您的情况匹配,此相关答案可能会有所帮助:Best way to select random rows PostgreSQL
【讨论】:
以上是关于Psycopg2 - 返回前 1000 个结果并随机选择一个的主要内容,如果未能解决你的问题,请参考以下文章
使用 Amazon Redshift 从 Python psycopg2 中的游标获取大于 MAX INT 的行数