如何在PostgreSQL SELECT语句中限制行数

98

在 PostgreSQL 中,与 SQL Server 的 TOP、DB2 的 FETCH FIRST 或 MySQL 的 LIMIT 相当的语句是什么?


多有趣啊,我昨天刚想知道这个!(当然,现在我不需要知道了,但我还是会给你点赞,因为那时候我可能用得上。) - Beska
6个回答

148

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

SELECT * FROM users LIMIT 5;

1
如mongotop所建议的那样,为避免不可预测的结果,您需要使用ORDER BY子句。 请参阅https://www.postgresql.org/docs/current/static/queries-limit.html。 - Poiana Apuana

37

你总是可以在LIMIT子句中添加OFFSET子句。

你可能需要从特定的偏移量中获取一组记录。以下是一个示例,它从第三个位置开始选择了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

更详细的解释和更多示例请查看此处


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

14

在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

8
除了使用limit,您也可以使用Fetch First。您的问题已经得到了回答。
Select * from users FETCH FIRST 5 ROWS ONLY

8

使用 LIMIT 子句或 FETCH FIRST 10 ROWS 来获取前10行数据。


0

如果你想选择10个学生,跳过前3名(即获取排名为第4到13的学生),例如从按照排名列排序的表中选取,你可以使用以下语句:

SELECT * FROM STUDENTS ORDER BY rank asc LIMIT 10 OFFSET 3;

如果你只想要前10名,可以省略OFFSET部分: SELECT * FROM STUDENTS ORDER BY rank asc LIMIT 10;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接