`

Sql Rank() over()的用法

 
阅读更多
创建一个test表,并插入6条数据。
CREATE TABLE test
(
	a INT,
	b INT,
	c CHAR
)
INSERT INTO test VALUES(1,3,'E')
INSERT INTO test VALUES(2,4,'A')
INSERT INTO test VALUES(3,2,'D')
INSERT INTO test VALUES(3,5,'B')
INSERT INTO test VALUES(4,2,'C')
INSERT INTO test VALUES(2,4,'B')

 

 

SELECT * from test

 

 

a           b           c
----------- ----------- ----
1           3           E
2           4           A
3           2           D
3           5           B
4           2           C
2           4           B

(6 行受影响)

1、整个结果集是一个分组,以a进行排名

SELECT a,b,c,rank () OVER (ORDER BY a) rank FROM test

 

 

a           b           c    rank
----------- ----------- ---- --------------------
1           3           E    1
2           4           A    2
2           4           B    2
3           2           D    4
3           5           B    4
4           2           C    6

(6 行受影响)

2、整个结果集是一个分组,以b进行排名

SELECT a,b,c,rank () OVER (ORDER BY b) rank FROM test

 

 

a           b           c    rank
----------- ----------- ---- --------------------
3           2           D    1
4           2           C    1
1           3           E    3
2           4           A    4
2           4           B    4
3           5           B    6

(6 行受影响)

3、以a,b进行分组,在每个组内以b进行排名。分了5个组,第2行跟第3行是一个组,其他的每行是一个组。在第2行与第3行的组内以b排名,并列为1

SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY b) rank FROM test

 

a           b           c    rank
----------- ----------- ---- --------------------
1           3           E    1
2           4           A    1
2           4           B    1
3           2           D    1
3           5           B    1
4           2           C    1

(6 行受影响)

4、以a,b进行分组,在每个组内以c进行排名。分了5个组,第2行跟第3行是一个组,其他的每行是一个组。在第2行与第3行的组内以c排名,由于c列一个是A,一个是B,所以Rank分别为1、2。

SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY c) rank FROM test

 

 

a           b           c    rank
----------- ----------- ---- --------------------
1           3           E    1
2           4           A    1
2           4           B    2
3           2           D    1
3           5           B    1
4           2           C    1

(6 行受影响)

总结:1、partition  by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。

2、Rank 是在每个分组内部进行排名的。

转自:http://www.cnblogs.com/mycoding/archive/2010/05/29/1747065.html

分享到:
评论

相关推荐

    分析函数ROW_NUMBER、RANK、DENSE_RANK的用法

    ### 分析函数ROW_NUMBER、RANK、DENSE_RANK的用法 #### 一、ROW_NUMBER()函数 **ROW_NUMBER()** 函数是SQL Server 2005引入的一个新的窗口函数,它为每一行返回一个唯一的整数值。该函数特别适用于需要对查询结果...

    SQL 关于记录排序 sqlserver

    根据提供的文件信息,我们可以深入探讨 SQL 服务器中的记录排序功能,特别是 `RANK()` 函数在 SQL Server 中的应用,以及如何在 Oracle 数据库中实现类似的功能。此外,我们还将涉及基于排序的操作,如更新(`UPDATE...

    SQL Server 排序函数 ROW_NUMBER和RANK 用法总结

    本文将深入探讨两种常用的排序函数:ROW_NUMBER()和RANK(),并结合实际例子来阐述它们的用法。 1. ROW_NUMBER() 函数: ROW_NUMBER() 函数为查询结果中的每一行分配一个唯一的整数,这个数字通常按照指定的排序顺序...

    实例讲解sql server排名函数DENSE_RANK的用法

    在本实例中,我们将深入探讨`DENSE_RANK`函数的用法,以及它与另一种排名函数`RANK`的区别。 首先,让我们了解`DENSE_RANK`函数的基本概念。`DENSE_RANK`函数在处理具有相同值的列时,会连续地分配排名。这意味着...

    Oracle查询中OVER (PARTITION BY ..)用法

    在这个场景中,我们将深入探讨`RANK()`和`DENSE_RANK()`以及`MIN()`和`MAX()`在`OVER (PARTITION BY ..)`中的应用。 首先,让我们来看`RANK()`和`DENSE_RANK()`。这两种函数都是用来对分区内的数据进行排名,但是...

    Sql Server 开窗函数Over()的使用实例详解

    这里我们将通过一个具体的实例来详细讲解`OVER()`函数的使用方法。 首先,我们创建一个名为`@t`的临时表,存储产品信息,包括`ProductID`、`ProductName`、`ProductType`和`Price`字段。接着,我们向`@t`中插入一些...

    [sql server]SQL Server2005杂谈(3):四个排名函数的比较.doc

    这四个排名函数都可以用于生成序号,但它们的用途和使用方法不同。row_number 函数可以用于实现查询表中指定范围的记录或实现分页功能,rank 函数和 dense_rank 函数用于考虑排序字段值相同的情况,ntile 函数用于将...

    over函数的使用

    ### over函数概述 在数据库查询语言SQL中,`over`函数是处理复杂数据分析的一个强大工具。...理解并掌握这些函数的使用方法对于提高数据分析能力至关重要。希望以上内容能帮助您更好地理解和应用这些强大的SQL特性。

    sql server 中如何增加递增的序号列【实用】

    这种方法使用 SQL Server 2005 独有的 RANK() OVER () 语法来生成递增的序号列。例如: ```sql SELECT RANK() OVER (ORDER BY 客户编号 DESC) AS 序号, 客户编号,公司名称 FROM 客户; GO ``` 这种方法使用 RANK() ...

    sqlserver排名次若干种方法

    ### SQL Server 排名次若干种方法 在SQL Server中,对特定字段进行排序和排名是一种常见的需求。本文将详细探讨几种实现这一功能的方法,并针对不同的业务场景提供解决方案。 #### 场景概述 假设我们有一张表,...

    SQL 获取顺序号的四种方法 IDENTITYRANKDENSE RANKROW NUMBER

    SQL 获取顺序号的四种方法:IDENTITY、RANK、DENSE_RANK、ROW_NUMBER 在 SQL 中,获取顺序号是非常常见的操作。今天,我们将讨论四种获取顺序号的方法:IDENTITY、RANK、DENSE_RANK、ROW_NUMBER。每种方法都有其优...

    SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法

    在SQL Server 2005中,`ROW_NUMBER()`、`RANK()`和`DENSE_RANK()`是三种常用的排名函数,它们在处理大数据集时非常有用,尤其在数据分析和报表生成方面。这些函数都可以帮助我们根据指定的条件对数据进行排序并赋予...

    ROW_NUMBER() OVER函数的基本用法

    ROW_NUMBER() OVER 函数的基本用法 ROW_NUMBER() OVER 函数是 SQL Server 中的一个窗口函数,用于对查询结果进行编号。该函数可以根据指定的列进行分组和排序,并为每一组记录返回一个唯一的编号。 语法: ROW_...

    ROW_NUMBER、RANK、DENSE_RANK 和 NTILE

    MS SQL 2005 中的排名函数包括 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE,这四个函数可以有效地分析数据并提供排序值。下面将详细介绍每个函数的用法和示例。 一、ROW_NUMBER 函数 ROW_NUMBER 函数返回结果集分区...

    oracle查看执行最慢与查询次数最多的sql语句

    在Oracle中,可以使用`v$sqlarea`视图来获取这些信息。以下是一个示例查询: ```sql SELECT sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", ROUND(sa.ELAPSED_TIME / 1000000, 2) "总执行时间",...

    sql语句 各种sql语句的详细用法与讲解

    在这个文档“sql语句妙用,各种sql语句的详细用法与讲解.doc”中,我们预计将深入探讨以下SQL语句的主要类别及其用法: 1. **数据查询(SELECT语句)**: - **基本查询**:从单个或多个表中选取数据,例如`SELECT ...

    源码T-SQL性能调优秘笈 基于SQL Server 2012窗口函数

    这里可能包括了更多高级用法,如LAG()和LEAD()函数用于访问相邻行的数据,以及累计和累计平均的计算方法,如SUM() OVER和AVG() OVER。 第三章“有序集函数”则关注在窗口操作中涉及的排序和分组功能。可能会讨论ROW...

    SQL Server 2005 提供了4个行号排序函数

    本文将详细介绍这四个行号排序函数:`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()` 和 `NTILE()` 的用法和应用场景。 #### 二、ROW_NUMBER() `ROW_NUMBER()` 函数为分区中的每一行分配一个唯一的数字。该函数对于实现...

    sql server如何利用开窗函数over()进行分组统计

    本文将重点讨论如何使用开窗函数`OVER()`来解决分组统计的问题,以及介绍一些常见的窗口函数类型。 首先,我们来看标题中提到的需求:求出以产品类别为分组,各个分组里价格最高的产品信息。这里可以通过两种方法...

Global site tag (gtag.js) - Google Analytics