龙空技术网

sqlserver开窗及去重row_number() over(partition by c1 order by c2)

洞悉科学 121

前言:

目前你们对“mysql开窗函数rownumber”大概比较关怀,看官们都需要了解一些“mysql开窗函数rownumber”的相关知识。那么小编同时在网摘上网罗了一些有关“mysql开窗函数rownumber””的相关知识,希望大家能喜欢,我们一起来了解一下吧!

开窗函数/分析函数:over()

开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。

开窗函数的语法为:over(partition by 列名1 order by 列名2 ),括号中的两个关键词partition by 和order by 可以只出现一个。over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。

开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。over里头的分组及排序的执行晚于“where,group by,order by”的执行。

1、排名开窗函数

PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。 ORDER BY 指定排名开窗函数的顺序,在排名开窗函数中必须使用ORDER BY语句。

(1) row_number() over():对相等的值不进行区分,相等的值对应的排名相同,序号从1到n连续。

(2) rank() over():相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。

(3) dense_rank() over():对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。

SQL SERVER 查询去重 PARTITION BY

rownumber() over(partition by col1 order by col2)

表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),WHERE RN= 1;取第一条数据

  SELECT * FROM   (SELECT *,  ROW_NUMBER() OVER( PARTITION BY 单位名称 ORDER BY 单位名称 )RN   FROM [dbo].[jg]) T WHERE RN= 1;
2、聚合开窗函数

很多聚合函数都可以用作窗口函数的运算,如SUM、AVG、MAX、MIN、COUNT。 聚合开窗函数只能使用PARTITION BY子句,ORDER BY不能与聚合开窗函数一同使用。

标签: #mysql开窗函数rownumber