`
zzc1684
  • 浏览: 1228862 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Sql学习第七天——SQL关于row_number()over()

阅读更多
Sql学习第七天——SQL关于row_number()over()
 
Sql学习第六天——SQL巩固练习
http://www.2cto.com/database/201304/206332.html
 
今天用到了row_number()over(),现在就以知识点的形式总结一下,以便于以后的回顾。
 
语法:
 
ROW_NUMBER ( ) 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
 
通过语法可以看出 over里有两个参数, partition by 和 order by ,其中partition by是可以不写的,但是order by是必须有的。可能对order by 比较熟悉(就是按什么排序),但 partition by是什么意思呢?partition  的中文解释是:n. 划分,分开;[数] 分割;隔墙;隔离物 vt. [数] 分割;分隔;区分。让我们再结合下面的参数说明和实例很容易就理解它的含义了。
 
参数:
 
PARTITION BY value_expression
         将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。 value_expression 指定对结果集进行分区所依据的列。
    如果未指定 PARTITION BY,则此函数将查询结果集的 所有行视为单个组。
order_by_clause
         ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。
返回值类型:
 
bigint(长整型)
 
以上是对row_number()over()的理论了解,现在开始用例子演示:
 
先建表(dbo.PeopleInfo):
 
CREATE TABLE [dbo].[PeopleInfo](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Gender] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [numb] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [phone] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [FenShu] [int] NULL
) ON [PRIMARY]
 
向表中插入数据:
 
insert into peopleinfo([name],Gender,numb,phone,fenshu) values ('李欢','男','3223','1365255',80)
insert into peopleinfo([name],Gender,numb,phone,fenshu) values ('李欢','男','322123','1',90)
insert into peopleinfo([name],Gender,numb,phone,fenshu) values ('李名','男','3213112352','13152',56)
insert into peopleinfo([name],Gender,numb,phone,fenshu) values ('李名','女','32132312','13342563',60)
insert into peopleinfo([name],Gender,numb,phone,fenshu) values ('王华','女','3223','1365255',80)
 
查询出所有插入的数据:
 
select * from  dbo.PeopleInfo
 
结果如图:
 
 
例子一:只用order by 不用 partition by 的sql语句如下:
 
--不用partition by
select [name],gender,fenshu, row_number() over(order by fenshu desc) as num from dbo.PeopleInfo
 
结果如图:
 
 
例子二:用order by 也用 partition by 的sql语句如下:
 
select [name],gender,fenshu, row_number() over(partition by Gender order by fenshu desc) as num from dbo.PeopleInfo
 
结果如图:
 
 
比较例子一和例子二的结果图很容易就明白partition by的用处了,以例子二为例就是先用partition by把性别【Gender】分成两个区一个男一个女,然后再用order by 把每个区里的分数【fenshu】从大到小排序。
 
-----------------------------------------------
 
练习题(用到了cte(with。。。as)知识点):
 
--查找出不同性别中分数最高的学生
with temp as
(
select [name],gender,fenshu, row_number() over(partition by Gender order by fenshu desc) as num from dbo.PeopleInfo
)
select * from temp where num = 1
 
结果如图:
 
分享到:
评论

相关推荐

    SQL ROW_NUMBER()分页比较

    SQL ROW_NUMBER() 分页比较 在 SQL Server 2005 中,使用 ROW_NUMBER() 函数可以实现分页功能,这种方法相比于 SQL Server 2000 中的分页方式效率要高出很多。但是,很多人在使用 ROW_NUMBER() 函数时,使用的方法...

    row_number.rar_SQL中row_number用法_number

    在SQL语言中,`ROW_NUMBER()`函数是一种非常重要的窗口函数,用于为查询结果集中的每一行分配一个唯一的整数。这个数字通常按照行的出现顺序进行分配,但也可以根据特定的排序条件进行调整。`ROW_NUMBER()`在数据...

    ROW_NUMBER() OVER函数的基本用法

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

    ROW_NUMBER()函数

    ROW_NUMBER() 函数是 SQL Server 2005 中的新功能,它可以实现数据的分页功能,从而提高数据查询的效率。在本文中,我们将详细介绍 ROW_NUMBER() 函数的使用方法和优点,以及如何使用它来实现高效的数据分页。 ROW_...

    oracle分析函数row_number() over()使用

    Oracle的分析函数`ROW_NUMBER() OVER()`是一种强大的工具,用于在查询结果集中为每一行分配一个唯一的序列号。这个函数通常用于数据分页、排名或者为特定条件的记录分配顺序。下面我们将详细讨论`ROW_NUMBER() OVER...

    row_number,根据多个字段过滤,partition by

    本篇文章将围绕如何利用`ROW_NUMBER()`函数结合`PARTITION BY`子句来实现基于多个字段的过滤操作,以解决在给定描述中的问题——即如何根据`name`、`idNumber`以及`date`这三个字段过滤教师表中的重复数据,并仅保留...

    oracle row_number用法

    ### Oracle Row_Number 函数详解 #### 一、Row_Number 基础概念 在Oracle数据库中,`ROW_NUMBER()`函数是一种窗口函数,主要用于为查询结果中的每一行分配一个唯一的序列号。这一特性使得它在处理分组数据时非常...

    SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较

    - `row_number`:为每一行生成一个唯一的序号,不受相同值的影响。 - `rank`:在考虑相同值的情况下分配序号,出现相同值时跳过序号。 - `dense_rank`:同样考虑相同值,但保证序号的连续性,不会跳过序号。 - `...

    SQLServer中Partition By及row_number 函数使用详解

    在SQL Server中,`PARTITION BY` 和 `ROW_NUMBER()` 是两种非常重要的分析函数,它们在处理大数据集时尤其有用。本文将详细讲解这两个函数的使用方法及其在实际场景中的应用。 `PARTITION BY` 关键字是分析函数的一...

    ROW_NUMBER、RANK、DENSE_RANK 和 NTILE

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

    SQL Server中row_number函数的常见用法示例详解

    一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。 以下是ROW_NUMBER()函数的语法实例: select *,row_...

    Row_number 分页存储过程

    例如,你可以创建一个名为`Pager_Rownumber`的存储过程,如下所示: ```sql CREATE PROCEDURE Pager_Rownumber @PageNumber INT, @PageSize INT, @OrderColumn NVARCHAR(128), @TableName NVARCHAR(128) AS ...

    row_number

    2. **分页查询**:通过 `ROW_NUMBER()` 结合 `WHERE` 子句可以实现简单的分页功能,比如获取第一页的数据,每页显示 10 条记录。 3. **复杂排序**:当需要对多列进行排序时,可以利用 `ROW_NUMBER()` 来实现复杂的...

    Mssql 增加排序列,分组排序与普通排序 ROW_NUMBER.docx

    在SQL Server中,`ROW_NUMBER()` 是一个窗口函数,它为查询结果集中的每一行提供一个唯一的整数。这个函数通常用于实现分页或者在排序数据时为每一行分配顺序号。在Mssql中,`ROW_NUMBER()` 可以与 `OVER` 子句一起...

    sqlServer使用ROW_NUMBER时不排序的解决方法

    [sql] with query as (select ROW_NUMBER() over(order by (select 0)) AS ROWNUM, * FROM Product) select * from query where ROWNUM BETWEEN 5 AND 10 –2.ROW_NUMBER必须指写over (order by **),有时我根本就...

    深入探讨:oracle中row_number() over()分析函数用法

    Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...

    SQL Server 2005中ROW_NUMBER()函数在存储过程分页中的应用.pdf

    在SQL Server 2005中,`ROW_NUMBER()`函数是一个非常重要的窗口函数,它在数据处理和查询优化方面发挥着关键作用,特别是在实现存储过程中的分页功能时。本文将深入探讨`ROW_NUMBER()`函数的工作原理,以及如何在...

    sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)

    SET @sql = 'SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ' + @strOrder + ') AS RowNum FROM ' + @tblName IF (@strWhere != '') SET @sql = @sql + ' WHERE ' + @strWhere SET @sql = @sql + ') ...

    sql利用row_number()取唯一记录方法

    row_number() over(partition by A order by B desc)

Global site tag (gtag.js) - Google Analytics