ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-11-21 13:16:09  阅读:322  来源: 互联网

标签:row-number aggregate-functions oracle11g mysql sql-server


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

我正在使用SqlServer进行测试,但是我也需要在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

CN(850)将成为我的网格记录总数.
RN将是数据的网格索引.

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

谢谢你的帮助.

[编辑]

因此,我将在每个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来说将有多昂贵?

解决方法:

在同一个SELECT子句中包含一堆详细信息行的情况下包含COUNT(*)将失败.这是因为COUNT(*)是一个聚合函数.在没有GROUP BY的情况下,它仅返回其结果集中的一行.因此,您需要在自己的SELECT语句中查询计数.

SQL Server具有ROW_NUMBER()函数. Oracle具有一个名为ROWNUM的伪列. MySQL对于获取行号确实是个悲惨的黑客.在这里描述. MySQL – Get row number on select

标签:row-number,aggregate-functions,oracle11g,mysql,sql-server
来源: https://codeday.me/bug/20191121/2051920.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有