理解 SQL 开窗函数
一次面试被问到开窗函数,懵逼了,赶紧补补总结一下。。。。
开窗函数也是函数,所以


比如在原来的查询上添加一个总数列
create table ztest(
id int identity,
c1 int ,
c2 varchar(10)
)
insert into ztest(c1,c2) values (1,'aa') ,(2,'aa'),(3,'bb'),(8,'cc'),(9,'cc')
SELECT * FROM ztest
--添加一个总数列
SELECT *,count(0) over() AS 总数 FROM ztest

子查询方式:
SELECT * ,(SELECT count(0) FROM ztest )[总数] FROM ztest
非常的nice好用
Sum 示例
SELECT *,sum(c1) over( ) AS [ΣC1] FROM ztest

我测试了自己创建的 function ,自己创建的不能开窗

可以开窗的函数有
Sum、Count、Max、Min 、First_Value、Last_Value
Row_Number
Cume_Rank
Percent_Rank
Rank
Dense_Rank
Lag--取上n行
Lead --取下n行取
窗口内分组排序
over(order by ) 排序
over(partition f) 按照 f 分组
SELECT *, min(c1) over(partition by c2 ORDER BY C1) AS [MinC1] FROM ztest

Rank & Dense_rank & Row_Number 并列排名与普通排名示例
--rank 排名 并列第 1 、3 、5、7、9
SELECT *, rank() over(ORDER BY c1 desc ) AS [rankC1] FROM ztest ORDER BY id

-- dense_rank 并列第 12345 名
SELECT *, dense_rank() over(ORDER BY c1 desc ) AS [rankC1] FROM ztest ORDER BY id

-- Row_Number -- 唯一排名
SELECT *, Row_Number() over(ORDER BY c1 desc ) AS [rankC1] FROM ztest ORDER BY id

我总结一下思路,先查出扁平数据,然后再处理成聚合的数据,如图所示。

理解 SQL 开窗函数的更多相关文章
- SQL开窗函数
[SQL]四种排序开窗函数 一 .简单了解什么是开窗函数 什么是开窗函数,开窗函数有什么作用,特征是什么? 所谓开窗函数就是定义一个行为列,简单讲,就是在你查询的结果上,直接多出一列值(可以是聚合 ...
- (011)每日SQL学习:SQL开窗函数
开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成.为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的 ...
- 数据库sql 开窗函数
--本文采用Oracle数据库测试,前4个查询为一组,后2个查询为一组,每组前面的查询是为了推出最后的查询 --创建表,为了简化处理,字段类型都采用varcharcreate table tb_sc( ...
- SQL SERVER开窗函数
作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了<程序员的SQL金典>这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也 ...
- SQL使用开窗函数与CTE查询每月销售额的前几名
WITH tagTab AS( SELECT YearMonth, pm=RANK() OVER(PARTITION BY YearMonth ORDER BY amount DESC) FROM S ...
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- sql over开窗函数,
sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...
- sql server ,OVER(PARTITION BY)函数用法,开窗函数,over子句,over开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx https://social.msdn.microsoft.c ...
- 【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...
随机推荐
- H3C 通配符掩码的应用示例
- H3C 传递信息
- webmagic笔记
在class Spider中有run函数,调用了 processRequest(requestFinal)完成对页面的下载和处理.在这个函数里面先调用downloader.download(reque ...
- 2018-2-13-C#-通配符转正则
title author date CreateTime categories C# 通配符转正则 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 ...
- Vant-UI移动端时间选择框
使用Vant input框时有时需要调用时间选择,时间选择框要结合弹出层使用 <div class="van-cell van-field"> <span cla ...
- 浅谈javaScript数据类型、变量、内存之间的关系,文末有图解
一.变量是没有类型的 在JavaScript中,定义变量的方法是“var 变量名=变量值”,无论这个变量要给他赋值为一个数字.字符串还是数组,他的类型都不需要声明.也就是说如果我只声明了一个变量“va ...
- Linux 内核 中断 urb
函数 usb_fill_int_urb 是一个帮忙函数, 来正确初始化一个 urb 来发送给 USB 设备的 一个中断端点: void usb_fill_int_urb(struct urb *urb ...
- java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
今天想把ssh整合的代码跑起来,控制台就一直在报错,搞了半天!!! Hibernate: select computer0_.computerId as computer1_0_, computer0 ...
- N9K 40G接口一分4*10G配置
Breakout InterfacesCisco NX-OS supports the breakout of high bandwidth 40G interfaces at the module ...
- CentOS7.6部署ceph环境
CentOS7.6部署ceph环境 测试环境: 节点名称 节点IP 磁盘 节点功能 Node-1 10.10.1.10/24 /dev/sdb 监控节点 Node-2 10.10.1.20/24 /d ...