如何限制 PostgreSQL SELECT 中的行
Posted
技术标签:
【中文标题】如何限制 PostgreSQL SELECT 中的行【英文标题】:How to limit rows in PostgreSQL SELECT 【发布时间】:2010-11-11 03:52:02 【问题描述】:PostgreSQL 中 SQL Server 的 TOP
或 DB2 的 FETCH FIRST
或 mysql 的 LIMIT
是什么?
【问题讨论】:
好笑...我昨天只是想知道这个! (当然,现在我不需要再知道了,但无论如何我都会投票给你,因为那时我本可以使用它。) 【参考方案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 行,但仅当这些行中的第一行等于特定数据时