--在部门内新水排名(如果有相同名次,用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 1318http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 696创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 674SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 413--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 530在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 578大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1719昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1619在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9671① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 740--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 832view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7191、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1038本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 880数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1150对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2328PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1024APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1390--======================== ... -
Not Exists练习
2012-07-23 14:40 886IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 991第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
### 分析函数ROW_NUMBER、RANK、DENSE_RANK的用法 #### 一、ROW_NUMBER()函数 **ROW_NUMBER()** 函数是SQL Server 2005引入的一个新的窗口函数,它为每一行返回一个唯一的整数值。该函数特别适用于需要对查询结果...
Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...
`ROW_NUMBER()`可以与`RANK()`和`DENSE_RANK()`进行比较。这些函数都可以用来给数据排序并分配等级,但是它们在处理并列的情况时有所不同: - **Rank**:如果两个或多个行具有相同的排序值,则这些行都将获得相同...
SQL Server 2005 中提供了四个排名函数,分别是 row_number、rank、dense_rank 和 ntile。这四个函数的主要功能是为查询结果生成一个序号,用于实现查询指定范围的记录或实现分页功能。 一、row_number 函数 row_...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
此外,`ROW_NUMBER()`函数还有其他窗口函数,如`RANK()`和`DENSE_RANK()`,它们在某些场景下可能会提供更灵活的解决方案。但在这里,我们主要关注`ROW_NUMBER()`在分页中的应用。 总结起来,`ROW_NUMBER()`函数在...
在SQL Server 2005中,ROW_NUMBER()、RANK()和DENSE_RANK()是三个重要的排名函数,它们在数据分析和查询优化方面扮演着重要角色。这些函数可以帮助用户更方便地处理排序和分组数据,尤其在处理大量数据时。 1. ROW_...
ROW_NUMBER()、RANK()和DENSE_RANK()是其中的三个关键函数,它们都用于对数据进行排序并分配唯一的序列号,但各有其特点和适用场景。以下是对这三个函数的详细解释: 1. ROW_NUMBER() ROW_NUMBER()函数为每一行提供...
总结来说,`row_number()`提供了唯一的序列号,`rank()`和`dense_rank()`则用于处理排名,其中`rank()`可能会产生空缺的排名,而`dense_rank()`则确保排名连续。这三个函数在处理复杂的数据分析任务时,能提供非常...
本文将介绍 Hive 中的四个序列函数:NTILE、ROW_NUMBER、RANK 和 DENSE_RANK。 首先,让我们了解什么是序列函数。序列函数是 Hive 中的一种特殊函数,用于对数据进行排序和编号。序列函数可以将数据分组并对每组...
在Oracle数据库中,`RANK()`函数是一种窗口函数,它被用于在一组数据中为每一行分配一个唯一的排名。此函数特别适用于需要基于特定条件对数据进行排序并为每个记录分配一个名次的情况。在本篇文章中,我们将深入探讨...
除了基本的行号分配,ROW_NUMBER() OVER还可以与其他窗口函数如RANK()和DENSE_RANK()结合使用,以实现更复杂的排名需求。例如,RANK()会跳过相同的行号,而DENSE_RANK()则不会。这些函数对于数据分析、报表生成以及...
`over`函数通常与`row_number()`、`rank()`、`dense_rank()`等函数配合使用,以实现对数据的复杂排序和分组需求。 ### `over(partition by)` 函数详解 `over(partition by)`用于将数据集划分为不同的分区或子集,...
- **rank()** 和 **dense_rank()**:与 `row_number()` 类似,但当遇到相同排序值时,`rank()` 会跳过一些行号,而 `dense_rank()` 不会。 #### 拓展应用 - **数据排名**:可以使用 `row_number()` 来确定数据集中...
本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...
排名函数主要包括ROW_NUMBER、RANK、DENSE_RANK以及NTILE,它们各自有着不同的应用场景和功能。 1. NTILE函数 NTILE函数用于将一个有序分区的行分配到指定数量的组中。每个组都有一个从1开始的编号。例如,如果...
SQL Server 2005引入了四个排名函数,分别是`row_number`, `rank`, `dense_rank`, 和 `ntile`。这些函数帮助我们为查询结果集中的每一行赋予一个唯一的或基于特定条件的顺序编号。 1. `row_number()` `row_number...
ROW WINDOW 函数用于指定一个行窗口,例如 ROWS N PRECEDING,表示当前行及之前 N 行的所有数据。 三、聚合函数 Oracle 分析函数中提供了多种聚合函数,包括: 3.1 AVG 函数 AVG 函数用于计算表达式的平均值。 ...