排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
来源:互联网 发布:seo标题 编辑:程序博客网 时间:2024/05/01 06:59
--在部门内新水排名(如果有相同名次,用dense_rank)
SELECT row_number() over(PARTITION BY t.deptno --按部门分组
ORDER BY t.sal) rn, --部门内按薪水排序
t.sal, t.ename, t.deptno
FROM emp t;
--分组累计计数,注意相同sal情况
SELECT COUNT(*) over(PARTITION BY t.deptno ORDER BY sal) cn, t.sal, t.ename, t.deptno
FROM emp t;
一、排名函数
1>、计算行号ROW_NUMBER函数
2>、排名和密集排号RANK和DESN_RANK
--示例:
CREATE TABLE dbo.Sales
(
empid VARCHAR(10) NOT NULL PRIMARY KEY,
mgrid VARCHAR(10) NOT NULL,
qty INT NOT NULL
);
INSERT INTO dbo.Sales(empid, mgrid, qty) VALUES
('A', 'Z', 300),
('B', 'X', 100),
('C', 'X', 200),
('D', 'Y', 200),
('E', 'Z', 250),
('F', 'Z', 300),
('G', 'X', 100),
('H', 'Y', 150),
('I', 'X', 250),
('J', 'Z', 100),
('K', 'Y', 200);
CREATE INDEX idx_qty_empid ON dbo.Sales(qty, empid);
CREATE INDEX idx_mgrid_qty_empid ON dbo.Sales(mgrid, qty, empid);
GO
select ROW_NUMBER() OVER (ORDER BY qty) AS seq,
RANK()OVER (ORDER BY qty) AS seq1,
DENSE_RANK() OVER (ORDER BY qty) AS seq2,
*
FROM Sales s
--运行结果
seq seq1 seq2 empid mgrid qty
1 1 1B X 100
2 1 1G X 100
3 1 1J Z 100
4 4 2H Y 150
5 5 3C X 200
6 5 3D Y 200
7 5 3K Y 200
8 8 4E Z 250
9 8 4I X 250
10 10 5A Z 300
11 10 5F Z 300
区别:当order by 列表不能唯一决定排序顺序时,ROW_NUMBER是非确定性的。而RANK和DENSE_RANK总是确定性的。即,具有相同排序值的行总是得到相同的排名值。而RANK和DENSE_RANK的区别在于,RANK生成的排名值可能有间断,但可以表明有多少行具有更低的排序值。DENSE_RANK生成的排名值没有间断。
--分析函数:
count(a) over (partition by b order by c)
--上面的count()就是一个分析函数;over可以理解为一个关键字或者标识,有over就表示它前面的函数
--是一个分析函数,否则就是普通的求和函数了;
--()中的partition by是指定分区,或者理解为分组
--()中的order by是指定该分区内的数据的顺序
原文地址:http://new-fighter.iteye.com/blog/1627952
0 0
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- sql 排名函数 rank() , row_number() , dense_rank() over
- ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD OVER()函数
- oracle 分组函数rank() over(),dense_rank(),row_number()
- 排名分析函数 rank(),dense_rank(),row_number()
- SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
- dense_rank() over()、rank() over()、row_number() over分析函数
- dense_rank() over()、rank() over()、row_number() over分析函数
- rank() over,dense_rank() over,row_number() over函数的区别
- row_number rank dense_rank函数
- oracle over rank dense_rank row_number 等分析函数总结
- 函数专题:sum、row_number、count、rank\dense_rank over
- oracle中分析函数 (over rank dense_rank row_number)
- SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法
- 数据库-函数-over,row_number,dense_rank,rank,log,lead,first_value等
- SQL Server 2005/2008 排名函数 ROW_NUMBER ,RANK,DENSE_RANK 比较
- Sql Server2005 4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE()
- 实验一的第二个又叫并集。
- Java stack test
- 64位Aliyun Linux 15.1安装mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
- 《计算机技术领域当前的主流技术及其社会需求调查报告》
- SpringSecurity初识
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
- gradle批量打包Android apk:不同的包使用不同的icon、label
- vs2013中如何打开asp.net配置页面
- Ebay架构特点(HPTS 2009)
- android 5.0新特性,recyclerview的基本用法,及应注意的问题
- Android调用JNI的进阶实例(摄像头预览数据转码RGB播放)
- 大型网站技术架构Tips
- 1055. The World's Richest (25)【排序】——PAT (Advanced Level) Practise
- struts2+jquery.ajax+json实现用户登陆,报错org.apache.struts2.json.JSONException:解决办法