--在部门内新水排名(如果有相同名次,用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 1 B X 100 2 1 1 G X 100 3 1 1 J Z 100 4 4 2 H Y 150 5 5 3 C X 200 6 5 3 D Y 200 7 5 3 K Y 200 8 8 4 E Z 250 9 8 4 I X 250 10 10 5 A Z 300 11 10 5 F 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是指定该分区内的数据的顺序
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1278http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 651创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 640SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 382--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 496在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 554大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1678昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1593在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9603① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 707--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 801view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 6721、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1001本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 839数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1112对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2289PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 978APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1356--======================== ... -
Not Exists练习
2012-07-23 14:40 852IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 949第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
MS SQL 2005 四个排序函数ROW_NUMBER、RANK、DENSE_RANK 和 NTILE简介用法结果排名排序
分析函数ROW_NUMBER、RANK、DENSE_RANK的用法
排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数row_number、rank、dense_rank和ntile,需要的朋友可以参考下。
本文主要是对Oracle分析函数Rank, Dense_rank, row_number的使用法,通过这些函数,我们可以对数据进行排序和分组,需要的朋友可以参考下。
ROW_NUMBER()说明:返回结果集...参数:<partition> :将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。 <order>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。返回类型:bigint 。示例:/*以下示例将
hive中分组取topN、row_number、rank和dense_rank使用介绍
主要介绍了sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
“rank()、dense_rank()和row_number()的区别”文章的date
Row_number() over()、rank() over()和dense_rank()over()函数的使用 Select * from (select name,class,s,rank() over(partition by class order by s desc) mm from t2) where mm=1; 说明: 1.在求第一名成绩的...
分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () OVER([partition_clause]...
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...
之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。 需求...
本技巧文章将讨论ROW_NUMBER(),RANK()和DENSE_RANK()之间的区别。
博客文章地址:http://blog.csdn.net/pfe_nova/article/details/41357435 SQL2005之后添加的几个排名函数以及透析与反透析关键字,主要有Row_Number、RANK、DENSE_RANK、NTILE函数,pivot以及unpivot关键字