关于SQL SERVER ROW_NUMBER(),RANK(),DENSE_RANK() 的排序和分页查询问题
经常接触SQL SERVER 的朋友来说,排序是经常遇见的问题,有的人还会傻傻自己写排序,比如用循环去写,当然这就比较难受
今天就给大家介绍一下SQL SERVER 自带的排序,共有三种,分别为ROW_NUMBER(),RANK(),DENSE_RANK() ,直接先给大家看列子再解释:
先上代码:

DECLARE @t1 TABLE
(
id INT,
name NVARCHAR(10)
);
INSERT @t1
(
id,
name
)
VALUES
(1, N'1'),
(1, N'2'),
(2, N'1'),
(3, N'1'),
(4, N'1'),
(4, N'2'),
(4, N'3'),
(6, N'1'),
(9, N'1');
SELECT ROW_NUMBER() OVER (ORDER BY id ASC) 'ROW_NUMBER',
RANK() OVER (ORDER BY id ASC) 'RANK',
DENSE_RANK() OVER (ORDER BY id ASC) 'DENSE_RANK',
id,
name
FROM @t1;
可以先自己允许看看,
下面上效果图:

可见,采用ROW_NUMBER()排序,排序是所有数据排序,最大序号为数据的行总数,
采用 RANK()排序,最大序号也为数据的行总数,但是跳过了相同的,简而言之就是序号不连续;
采用DENSE_RANK()排序,则是序号连续,但是有并列。
使用场景一般是在做分页的时候用,比如查多少页,每一页多少行,则可以用 (Page-1)*Rows<row<Page*Rows
下面给个列子:
DECLARE @t1 TABLE
(
id INT,
name NVARCHAR(10)
);
INSERT @t1
(
id,
name
)
VALUES
(1, N'1'),
(1, N'2'),
(2, N'1'),
(3, N'1'),
(4, N'1'),
(4, N'2'),
(4, N'3'),
(6, N'1'),
(9, N'1');
--SELECT ROW_NUMBER() OVER (ORDER BY id ASC) 'ROW_NUMBER',
-- RANK() OVER (ORDER BY id ASC) 'RANK',
-- DENSE_RANK() OVER (ORDER BY id ASC) 'DENSE_RANK',
-- id,
-- name
--FROM @t1; DECLARE @Page INT=2
DECLARE @Rows INT=3
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY id ASC) row,id,name FROM @t1)t WHERE (@Page-1)*@Rows<t.row AND t.row<=@Page*@Rows
我想要第二页的数据,每一页3行,效果如图

今日分享结束
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识
关于SQL SERVER ROW_NUMBER(),RANK(),DENSE_RANK() 的排序和分页查询问题的更多相关文章
- SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法
一.ROW_NUMBER()的用法 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) row_number()从1开始,为每一条分组记 ...
- SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
>>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF
1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...
- ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...
- 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...
- Hive学习之路 (十四)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
概述 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. 注意: 序列函数不支持WINDOW子句.(ROWS BETWEEN) 数据 ...
- SQL Server调优系列基础篇(子查询运算总结)
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- sql server 使用链接服务器连接Oracle,openquery查询数据
对接问题描述:不知道正式库oracle数据库账户密码,对方愿意在对方的客户端上输入账号和密码,但不告诉我们 解决方案:使用一台sql server作为中间服务器,可以通过转存数据到sql serv ...
- sql:sql server,MySQL,PostgreSQL的表,视图,存储过程结构查询
sql server 2005: --SQL SERVER 2005 生成代码需要知道的SQL语句 use LibrarySystem --查询当前数据库所有表和其的主键字段,字段类型,长度,是否为空 ...
随机推荐
- 用Abp实现双因素认证(Two-Factor Authentication, 2FA)登录(一):认证模块
@ 目录 原理 用户验证码校验模块 双因素认证模块 改写登录 在之前的博文 用Abp实现短信验证码免密登录(一):短信校验模块 一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系 ...
- 介绍一下js垃圾回收机制
JavaScript中的垃圾回收机制负责自动管理内存,回收不再使用的对象所占用的内存空间.在JavaScript中,开发者不需要显式地分配和释放内存,垃圾回收器会自动完成这些操作.以下是关于JavaS ...
- v-if与v-show造成部分元素丢失的问题——v-if复用元素问题
pre { overflow-y: auto; max-height: 400px } img { max-width: 500px; max-height: 300px } 问题描述 在写tab切换 ...
- Solon v2.2.10 发布,助力信创国产化
Solon 是一个高效的 Java 应用开发框架:更快.更小.更简单.它不是 Spring.没有使用 Servlet.JavaEE 接口,是一个有自己接口标准的开放生态.可以为应用软件国产化提供支持, ...
- 非关系型数据库---Redis安装与基本使用
一.数据库类型 关系数据库管理系统(RDBMS) 非关系数据库管理系统(NoSQL) 按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上) 数据之间可以做无关联操作 (例如: 多表查询,嵌套查 ...
- Go语言网络编程: 模拟实现DNS服务器
环境: 两台虚拟机,不限系统 写在前面 DNS服务器是干什么的?DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器,保存了一张域名和与之相 ...
- 数据库mysql8.0安装+Navicat12
第一次写博客,准备坚持下去把每天学习到的东西记录下来,刚好安装mysql8.0过程中遇到了一些问题并解决,系统win10.致敬博客 首先先粘贴一段mysql的百度百科词条:MySQL是一个关系型数据库 ...
- .Net性能测试工具BenchmarkDotNet学习
.Net性能测试工具BenchmarkDotNet学习 BenchmarkDotNet 是一个用于性能基准测试的开源框架.它可以让开发人员编写简单易懂的代码,并测量和分析这些代码的性能表现,从而帮助开 ...
- chatgpt接口开发笔记1:completions接口
chatgpt接口开发笔记1:completions接口 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.t ...
- Django笔记三十二之session登录验证操作
本文首发于公众号:Hunter后端 原文链接:Django笔记三十二之session登录验证操作 这一篇笔记将介绍 session 相关的内容,包括如何在系统中使用 session,以及利用 sess ...