SQL 在每个 SELECT 请求上获取 ROW_NUMBER 和 COUNT

2024-03-15

我正在构建一个网格机制,我需要从数据库中检索找到的总数或记录的数据,仅检索其中包含 row_number 的这些记录的范围。

我正在使用 Sql Server 进行测试,但我也需要在 Oracle 和 MySql 上支持它。

这就是我正在尝试的,但我无法让它发挥作用:

    SELECT * FROM 
           (SELECT ROW_NUMBER() AS RN, 
                   COUNT(*) AS TOTALCN, 
                   Id, 
                   Name, 
                   Phone 
            FROM MyTable WHERE Deleted='F')
            WHERE RN > 100 AND RN < 150;

这个想法是:

MyTable -> number of records: 1000
Select Id, Name, Phone from MyTable where Deleted='F' -> number of records: 850
Get the records 100 to 150 from the 850.

我想要一个像这样的选择:

RN   TOTALCN Id    Name   Phone
1    850     Data  Data   Data
2    850     Data  Data   Data
3    850     Data  Data   Data
4    850     Data  Data   Data
5    850     Data  Data   Data
6    850     Data  Data   Data

The CN (850)将是我的网格记录总数。 这RN将是数据的网格索引。

有人可以帮助我实现这一目标吗?

谢谢你的帮助。

[EDIT]

因此,我肯定会在每个 SELECT 上添加一个 ORDER BY。这是我到目前为止得到的:

SELECT * FROM (SELECT ROW_NUMBER() 
              OVER (ORDER BY ID)  AS RN, 
              COUNT(*) OVER (ORDER BY (SELECT NULL) AS CNT) 
              Id, Name Phone FROM MyTable WHERE Deleted='F') 
T WHERE RN > 100 AND RN < 500;

我走的路对吗?

这对 SQL 来说有多昂贵?


这可能是为了允许分页。显示总行数可能非常昂贵。

我发现在各种数据库上都能很好地工作的一种方法是将工作分成两部分。首先,您收集临时表中相关行的 ID。其次,查询完整数据集。第一部分中收集的数据为您提供了一种简单的方法来计算特定页面上的总行数和行 ID。

下面是 SQL Server 的一个粗略示例。请注意,该示例不依赖于窗口函数,例如row_number(),这在 MySQL 中不可用。

create table #id_list (rn int identity, pk int);

insert   #id_list
         (pk)
select   customer_id
from     customers
where    name like '%Joe%';

select   (select  count(*) from #id_list) as total_rows
,        rn -- The row's number
,        name
,        birth_date
,        ... -- Other columns
from     #id_list id
join     customer c
on       c.pk = c.customer_id
where    rn between 15 and 29; -- Second 15-row page 

顺便说一句,如果可行的话,我会将这个要求返回给设计师,以仔细检查这是否值得花费大量时间。如果不需要显示总行数,那就简单多了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 在每个 SELECT 请求上获取 ROW_NUMBER 和 COUNT 的相关文章

随机推荐

  • 使用 pandas 从每组中随机选择一行

    我有一个熊猫数据框df显示如下 Month Day mnthShape 1 1 1 016754224 1 1 1 099451003 1 1 0 963911929 1 2 1 016754224 1 1 1 099451003 1 2
  • 将 SPSS 元数据变量标签、值标签、数据类型等导出到自定义文本文件

    我们有一个很大的 SPSS 文件 大小为 5MB 包含大约 1400 个变量 我们正在将所有内容迁移到数据库 为了配置表格和表单等 我们需要 SPSS 文件中的元数据 但采用特定的自定义格式 所以如果变量视图是这样的 Name Label
  • 如何配置 Sphinx 有条件地排除某些页面?

    使用 Sphinx 生成文档时 我希望能够生成文档的两个版本 一个包含所有内容 另一个仅包含一组特定的页面 实现这一目标的最佳方法是什么 我可以编写一个构建脚本来移动文件来实现此目的 但如果有一种方法可以告诉 sphinx 在特定构建期间排
  • 更改密码后显示消息吗?

    我正在使用默认更改密码机制 https docs djangoproject com en dev topics auth django contrib auth views password change由 django 提供 我在用着p
  • 结账开始观察者

    Magento 中是否有观察者来检测结帐过程的开始 这将包括点击页面checkout onepage or checkout onestepcheckout 如果可能的话 我想避免覆盖控制器 每个控制器操作都会导致多个目标事件被触发Mage
  • ajax 问题 - firebug 中的 200 OK 但没有响应正文的红色消息

    据我所知 我有与跨域相关的 ajax 小问题 在本地机器上我用一些ajax创建了html示例 在注册文本字段中 用户输入 用户名 每次击键时 ajax 都会将其发送到 本地 Tomcat servlet 检查该用户名是否已被使用 并发回 已
  • TypeError;Article.find() 不是 Sails.js 中的函数

    我正在使用 sails js 并收到错误 Articles find is not a function 以下是datastore js mongodb adapter require sails mongo url mongodb loc
  • 如何对没有分支文件夹的 TFS Team 项目进行分支

    我有一个这样的团队项目 DefaultCollection Project 1 Project 2 Project 3 Somefile txt Somefile2 doc 所有文件和项目都位于团队项目的根目录中 我没有 主干 和 分支 文
  • 使用 WordPress 高级自定义字段时“url”的字符串偏移量非法

    我正在将 Bootstrap 模板转换为 WordPress 主题 对于自定义字段 我正在使用该插件高级自定义字段 https wordpress org plugins advanced custom fields 问题是当我尝试在以下命
  • 使用多个 OR || 简化 IF 语句相同变量的条件

    这是我的代码 var something four if something one something two something three something five something six something seven do
  • 使用@staticmethod 有什么好处吗?

    我想知道您是否在代码中使用 staticmethod 装饰器 就我个人而言 我不使用它 因为写 staticmethod 比写 self 需要更多的字母 使用它的唯一好处 对我来说 可能是代码更加清晰 但由于我通常为 sphinx 编写方法
  • C++ 程序无法使用 Clang 和 Visual Studio 2010 Express 进行编译

    我正在尝试使用 Visual C 2010 Express 编译本教程中所述的源代码 http kevinaboos wordpress com 2013 07 23 clang tutorial part ii libtooling ex
  • 如何以编程方式找出机器的上次登录时间?

    我想 a 以编程方式和 b 远程查找用户成功登录 Windows 计算机的最后日期 时间 通过远程桌面或控制台 我愿意采用任何典型的 Windows 语言 C C VB 批处理文件 JScript 等 但任何解决方案都很好 尝试这个 pub
  • 将朴素贝叶斯训练分类器保存在 NLTK 中

    我对如何保存经过训练的分类器有点困惑 例如 每次我想使用分类器时重新训练它显然非常糟糕且缓慢 我如何保存它并在需要时再次加载它 代码如下 提前感谢您的帮助 我正在使用 Python 和 NLTK 朴素贝叶斯分类器 classifier nl
  • 为什么说C++不支持参数多态?

    根据维基百科页面参数多态性 https en wikipedia org wiki Parametric polymorphism 类型多态性的一些实现表面上与参数多态性相似 同时也引入了特殊方面 C 模板专门化就是一个例子 问题 为什么说
  • 哪些 UNIX 命令支持彩色输出?

    我喜欢使用支持彩色输出的 UNIX bash 命令 因此 我定义了一些别名 它们自动启用我知道支持此选项的命令的彩色输出 但是 我确信有数百个命令支持彩色输出 我想知道它们是什么 我的那些 bash aliases文件是 ls color
  • .NET - 调整图像大小的边框

    我正在尝试在 NET 中调整图像大小 但调整大小后的图像周围出现微弱的黑色边框 我找到了一个帖子 http social msdn microsoft com forums en US csharpgeneral thread cf7650
  • 从变量引用另一个工作簿中的工作表时下标超出范围

    看图片 http s12 postimg org ov8djtuh9 Capture jpg http s12 postimg org ov8djtuh9 Capture jpg Context 尝试激活另一个工作簿中的工作表 变量 cSh
  • Flexbox 难以将图标与容器底部对齐

    我在使用 Flexbox 时遇到了一些困难 如你所见 我有一个aside包含社交媒体图标的有序列表的元素 由于某种原因 我无法将这些图标粘在包含的内容的底部div HTML代码 div class outercontainer group
  • SQL 在每个 SELECT 请求上获取 ROW_NUMBER 和 COUNT

    我正在构建一个网格机制 我需要从数据库中检索找到的总数或记录的数据 仅检索其中包含 row number 的这些记录的范围 我正在使用 Sql Server 进行测试 但我也需要在 Oracle 和 MySql 上支持它 这就是我正在尝试的