关于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 --查询当前数据库所有表和其的主键字段,字段类型,长度,是否为空 ...
随机推荐
- QtDesigner安装
QtDesigner简单介绍 Qtdesigner是Python设计里面一个非常实用的工具,使得人们编写qt界面可以不仅仅是使用纯代码,而可以在可视化的基础上设置,非常方便. QtDesigner安装 ...
- [PKM] 家庭数据中心
1 NAS(Network Attached Storage/网络附属存储) 1.1 NAS的定义 NAS(Network Attached Storage:网络附属存储):具备资料存储功能的装置.按 ...
- ServletContext 详解(转载)
转载:https://www.cnblogs.com/zjdxr-up/p/7761813.html ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释 ...
- Spring自定义参数解析器设计
作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody.@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什 ...
- Java运行准备JDR JRE JVM知识和环境变量的作用
JDK.JRE.JVM简介 JDK:Java Development Kit Java开发者工具包 JRE:Java runtime environment Java运行环境 JVM:Java V ...
- JS逆向实战13——某市公共资源交易中心Cookie混淆加密
"本文地址:https://www.cnblogs.com/zichliang/p/17346860.html 目标网站 aHR0cDovL2xkZ2d6eS5obmxvdWRpLmdvdi ...
- 可视化—gojs 超多超实用经验分享(一)
目录 1. 设置分组模板,默认样式,统一最小宽度,展开收起状态监听 2. 分组名称显示成员个数: 分组名称+成员个数: name(children) 3. 分组成员为空时,不显示 placeholde ...
- Spring源码:Bean生命周期(三)
前言 在之前的文章中,我们已经对 bean 的准备工作进行了讲解,包括 bean 定义和 FactoryBean 判断等.在这个基础上,我们可以更加深入地理解 getBean 方法的实现逻辑,并在后续 ...
- Langchain框架 prompt injection注入
Langchain框架 prompt injection注入 Prompt Injection 是一种攻击技术,黑客或恶意攻击者操纵 AI 模型的输入值,以诱导模型返回非预期的结果 Langchain ...
- 【Vue2】编程式路由导航
在Vue Router中,除了使用 创建 a 标签来定义导航链接之外,还可以使用Vue Router通过编写代码来实现导航. 他提供的三个实例方法:router.push.router.replace ...