SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE
原文:SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE
SQL 2005新增加相关函数 :
ROW_NUMBER,RANK,DENSE_RANK、NTILE
窗口函数
OVER (
[ <PARTITION BY clause> ] ----分区列
[ <ORDER BY clause> ] ---排序列
[ <ROW or RANGE clause> ] ---SQL Server 2012 到 SQL Server 2014
)
本文介绍窗口函数与以上四个函数的配合使用
---创建表初始化查询语句
CREATE TABLE YSH
(
lev1 VARCHAR(10),
lev2 VARCHAR(10),
lvalue VARCHAR(10)
)
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('A','A1','lvalue1')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('A','A1','lvalue2')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('A','A1','')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('A','A2','lvalue1')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('A','A2','lvalue2')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('B','B1','')
INSERT INTO YSH (lev1,lev2,lvalue) VALUES ('B','B2','lvalueB2')
1、ROW_NUMBER()
PARTITION BY 表示分区,有分区后不同的分区编号都会从1进行编号
ORDER BY 按列排序的方式
SELECT *,
ROW_NUMBER() OVER(ORDER BY lev1,lev2) Lev2NUM,
ROW_NUMBER() OVER(PARTITION BY lev1 ORDER BY lev1,lev2) Lev1NUM,
ROW_NUMBER() OVER(PARTITION BY lev1,lev2 ORDER BY lev1,lev2) Lev1NUM1
FROM YSH
以上查询执行结果无分区时编号依次增长;按lev1分区时,lev1值变更后编号从1开始重新编号;按lev1,lev2组合分区时,两列任何值变更均从新编号
注:此函数的窗口函数中必须存在order by 若不存在则报错。
2、RANK() 排名
PARTITION BY 表示分区,有分区后不同的分区编号都会从1进行编号
ORDER BY 按列排序的方式 若值相同则编号也相同。
SELECT *,
RANK() OVER(ORDER BY lev1)
FROM YSH
以上查询结果因为A 有5个相同的值按排名不分前后,但是B的排名在A后面则值为6
3、DENSE_RANK() 密集排名
SELECT *,
DENSE_RANK() OVER(ORDER BY lev1)
FROM YSH
以上执行查询结果是相同的排名相同,但是B的排名是紧接着A的编号继续增加的。
4、NTILE(int) 平均分组
NTILE(expr) OVER([PARTITION BY]ORDER BY) :把有序的数据集平均分配到 expr指定的数量的桶中,将桶号分配给每一行;如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的行数最多相差。
SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE的更多相关文章
- PCB MS SQL 排序应用(row_number rank dense_rank NTILE PARTITION)
一.排序前,准备数据 --表变量 ),流程数 int) insert into @table union all union all union all union all --查看一下 select ...
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...
- SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
>>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...
- 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...
- SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()
1 SELECT orderid,custid,val, ROW_NUMBER() OVER(ORDER BY val) AS rownum, RANK() OVER(ORDER BY val) AS ...
- SQL Server:排名函数row_number,rank,dense_rank,ntile详解
1.Row_Number函数 row_number函数大家比较熟悉一些,因为它的用途非常的广泛,我们经常在分页与排序中用到它,它的功能就是在每一行中生成一个连续的不重复的序号 例如: select S ...
- SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name ...
- sqlserver 中row_number,rank,dense_rank,ntile排名函数的用法
1.row_number() 就是行号 2.rank:类似于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变 3.dense_rank ...
随机推荐
- python爬取动态网页2,从JavaScript文件读取内容
import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...
- php + ajax实现 帖子点赞功能
知识: 一.首先页面需要加载jquery框架 二.ajax常用参数解释: ①.type:传输数据方式,get或者post ②.url:处理数据的PHP脚本 ③.data:传输的数据索引及值,值用js获 ...
- 洛谷 P4514 上帝造题的七分钟 解题报告
P4514 上帝造题的七分钟 题目背景 裸体(裸题)就意味着身体(神题). 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n \times m\)矩阵. 第二 ...
- Vitamio介绍及使用
一.Vitamio介绍 1.1 Vitamio是什么? Vitamio是Android平台视音频播放组件,支持播放几乎格式的视频以及主流网络视频流(http/rtsp/mms等),详细的中文介绍: 这 ...
- 学习C++ -> 向量(vector)
一.向量的介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template Lib ...
- POJ1386 Play on Words
Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Description Some of ...
- yii 用户登录验证(cwebuser) yii 用户登录 (记)
yii 的确是一个强大而臃肿的框架,简单的小项目,或者只做后台接口调用的项目,建议不要用. 今天记录一下yii使用中cwebuser(Yii::app()->user->login())登 ...
- 管理页面的类 PageHelper
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Da ...
- 实现自己的系统调用针对linux-2.6.34【转】
转自:http://biancheng.dnbcw.net/linux/303362.html 在linux下实现自己的系统调用.主要功能是:遍历系统的进程,并将相关的进程信息存放在自己定义的结构体中 ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(8)——AMD显卡DRM驱动初始化过程
前面几个blog对DRM驱动.显卡的显存管理机制.中断机制都进行了一些描述,现在阅读AMD drm驱动的初始化过程应该会轻松许多. 下面是一AMD的开发人员编写的文章(先暂时放在这里,后续有时间再添加 ...