网站首页 > 基础教程 正文
开窗函数/分析函数: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不能与聚合开窗函数一同使用。
猜你喜欢
- 2025-01-01 数据库:JDBC详解
- 2025-01-01 Node-RED系列(五):Node-RED序列节点的使用
- 2025-01-01 数据库基础篇(二)——SQL之数据查询
- 2025-01-01 面试官问:select * from for update会锁表还是锁行?教你回答!
- 2025-01-01 SQLServer 日期函数大全
- 2025-01-01 Python爬虫快速入门,BeautifulSoup基本使用及实践
- 2025-01-01 SQL轻松入门(5):窗口函数
- 2025-01-01 mysql中 group by,having总结
- 2025-01-01 太厉害了,只需一条DOS命令,就可以找到windows10许可证密钥
- 2025-01-01 面试官:谈谈你对mysql联合索引的认识?
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)