如何限制 PostgreSQL SELECT 中的行

Posted

技术标签:

【中文标题】如何限制 PostgreSQL SELECT 中的行【英文标题】:How to limit rows in PostgreSQL SELECT 【发布时间】:2010-11-11 03:52:02 【问题描述】:

PostgreSQL 中 SQL Server 的 TOP 或 DB2 的 FETCH FIRSTmysqlLIMIT 是什么?

【问题讨论】:

好笑...我昨天只是想知道这个! (当然,现在我不需要再知道了,但无论如何我都会投票给你,因为那时我本可以使用它。) 【参考方案1】:

在 PostgreSQL 上,有两种方法可以实现这一目标。

SQL 标准

第一个选项是使用 SQL:2008 标准方法来限制使用FETCH FIRST N ROWS ONLY 语法的结果集:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
FETCH FIRST 50 ROWS ONLY

自 PostgreSQL 8.4 起支持 SQL:2008 标准语法。

PostgreSQL 8.3 或更早版本

对于 PostgreSQL 8.3 或更早的版本,您需要 LIMIT 子句来限制结果集大小:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
LIMIT 50

【讨论】:

【参考方案2】:

使用LIMIT 子句或FETCH FIRST 10 ROWS

【讨论】:

【参考方案3】:

您可以像在 MySQL 中一样使用LIMIT,例如:

SELECT * FROM users LIMIT 5;

【讨论】:

按照 mongotop 的建议,为了避免不可预知的结果,您需要使用 ORDER BY 子句。见postgresql.org/docs/current/static/queries-limit.html【参考方案4】:

除了限制之外,您还可以使用 Fetch First。你的问题已经有了答案

Select * from users FETCH FIRST 5 ROWS ONLY

【讨论】:

【参考方案5】:

您始终可以将OFFSET 子句与LIMIT 子句一起添加。

您可能需要从特定偏移量中提取一组记录。这是一个从第 3 个位置开始选取 3 条记录的示例:

testdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

这将产生以下结果:

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000

完整的解释和更多的例子检查HERE

【讨论】:

使用 LIMIT 时,使用 ORDER BY 子句将结果行约束为唯一顺序很重要。否则,您将获得查询行的不可预测的子集(来自文档)。

以上是关于如何限制 PostgreSQL SELECT 中的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中的函数内返回 SELECT 的结果?

PostgreSQL 中的分组限制:显示每个组的前 N ​​行,但仅当这些行中的第一行等于特定数据时

Postgresql中的日期限制运行平均值 - 如何划分为四个星期

PostgreSQL LIMIT 子句

PostgreSQL LIMIT 子句

如何在 PostgreSQL 中返回记录数