首页 > 解决方案 > 从查询中选择 FIRST X,但获取计数(例如用于分页)

问题描述

我想返回前 x 行,但还需要我选择的项目总数。在 MSSQL 中我想通了,但在 Interbase 中我没有找到相同的解决方案。

Firebird 也存在这样的声明吗?

一个普遍的问题是,这种嵌入式函数(也在 MSSQL 中)实际上是否比执行第二条语句更快以获得总行数?

标签: sqlfirebird

解决方案


您需要两个单独的请求。

一种是接收使用符合 SQL的offset&fetch从 Firebird 3 或替代rows子句或first&开始设置的有限行skip

select field1, field2
from mytable
[where conditions]
[offset 0 rows] fetch first 10 rows only

另一种是接收总记录数:

select count(*) from mytable [where conditions]

请注意,对于复杂查询和/或大量数据,最后一次查询可能代价高昂。通常在大量数据上使用另一种方法。一种是专用的 FTS 引擎,例如 SphinxSearch。例如,谷歌会给你一个大概的结果计数。


推荐阅读