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 个结果并随机选择一个的主要内容,如果未能解决你的问题,请参考以下文章

选择前1000名,但知道有多少行?

使用 Amazon Redshift 从 Python psycopg2 中的游标获取大于 MAX INT 的行数

psycopg2._psycopg.Diagnostics 的打印结果

Psycopg2 DictCursor什么都不返回

Psycopg2 db连接在丢失的网络连接上挂起

用Java编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。