SQL:使用 LIMIT 查询时计算匹配结果的数量

Posted

技术标签:

【中文标题】SQL:使用 LIMIT 查询时计算匹配结果的数量【英文标题】:SQL: Counting number of matching results when using a LIMIT query 【发布时间】:2010-02-16 16:19:26 【问题描述】:

假设我的 mysql 数据库中的 users 表包含大量条目。

我需要遍历所有用户,但我想一次只执行块(即使用 LIMITOFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

是否可以知道查询中匹配的用户总数,但只返回 LIMIT 个?

也就是说,我是否可以提前知道用户总数,而无需单独查询?

【问题讨论】:

【参考方案1】:

您可以在(几乎)一个查询中使用SQL_CALC_FOUND_ROWS and FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200;
SELECT FOUND_ROWS();

虽然您最终仍会得到两个结果集,但实际查询只执行一次,这样可以避免重复编码和可能浪费的一些 CPU 周期。

【讨论】:

【参考方案2】:

很遗憾,没有。你需要做两个查询:一个是获取用户总数,另一个是获取单个页面的用户。

select count(*) from users;
select * from users limit 0,10;

【讨论】:

【参考方案3】:

在 SQL 标准中是不可能的。我不太了解mysql,但我认为即使在任何 SQL 扩展中也不可能。

【讨论】:

以上是关于SQL:使用 LIMIT 查询时计算匹配结果的数量的主要内容,如果未能解决你的问题,请参考以下文章

SQL中limit的用法

带有 LIMIT 和 OFFSET 的 SQL 排序依据。一次对每个匹配的行进行排序

SQL中limit的用法

Access 2013 - 在添加任何新字段时计算字段值

当列名包含'XXX'时计算非空单元格的数量[重复]

sql limit的用法