sql - 从查询中选择 FIRST X,但获取计数(例如用于分页)
问题描述
我想返回前 x 行,但还需要我选择的项目总数。在 MSSQL 中我想通了,但在 Interbase 中我没有找到相同的解决方案。
Firebird 也存在这样的声明吗?
一个普遍的问题是,这种嵌入式函数(也在 MSSQL 中)实际上是否比执行第二条语句更快以获得总行数?
解决方案
您需要两个单独的请求。
一种是接收使用符合 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。例如,谷歌会给你一个大概的结果计数。
推荐阅读
- node.js - 应用程序未使用“start node.js”脚本部署
- asp.net-core - 如何在不停止 iis 的情况下将 ASP.NET Core 发布到服务器(错误:该进程无法访问该文件,因为它正在被另一个进程使用)
- java - 提交 JSON 有效负载时 Java 中的撇号解析问题
- c# - 套接字只接收第一次发送,其他的只是空的
- c++ - 如何为 C++ 函数指定 noexcept ?
- elasticsearch - Elasticsearch 如何在分片中进行术语查询?
- angular - Angular 7 - 打字稿语法
- c# - 如何在 C# 中编写包含内部节点的 XML 的 CData?
- c# - 如何使用 Web api 中的过滤器传递带有错误消息的状态
- r - 按列表列将列表转换为多个数据框