【问题标题】:Psycopg2 - return first 1000 results and randomly pick onePsycopg2 - 返回前 1000 个结果并随机选择一个
【发布时间】:2013-07-02 14:15:20
【问题描述】:

您好,我有一个包含 270 万条记录的 postgresql“TABLE1”。每条记录都有一个字段“FIELD1”,该字段可能为空,也可能有数据。我想要一个 SELECT 语句或方法,它 a) 从 TABLE1 返回前 1000 个结果,其中 FIELD1 为空,b) 随机选择一个记录以返回到 python 变量。救命???

【问题讨论】:

标签: python postgresql psycopg2 postgresql-9.2


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2021-10-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多