一次面试被问到开窗函数,懵逼了,赶紧补补总结一下。。。。

开窗函数也是函数,所以

比如在原来的查询上添加一个总数列

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 开窗函数的更多相关文章

  1. SQL开窗函数

    [SQL]四种排序开窗函数   一 .简单了解什么是开窗函数 什么是开窗函数,开窗函数有什么作用,特征是什么? 所谓开窗函数就是定义一个行为列,简单讲,就是在你查询的结果上,直接多出一列值(可以是聚合 ...

  2. (011)每日SQL学习:SQL开窗函数

    开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成.为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的 ...

  3. 数据库sql 开窗函数

    --本文采用Oracle数据库测试,前4个查询为一组,后2个查询为一组,每组前面的查询是为了推出最后的查询 --创建表,为了简化处理,字段类型都采用varcharcreate table tb_sc( ...

  4. SQL SERVER开窗函数

    作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了<程序员的SQL金典>这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也 ...

  5. SQL使用开窗函数与CTE查询每月销售额的前几名

    WITH tagTab AS( SELECT YearMonth, pm=RANK() OVER(PARTITION BY YearMonth ORDER BY amount DESC) FROM S ...

  6. SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数

    https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...

  7. sql over开窗函数,

    sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...

  8. sql server ,OVER(PARTITION BY)函数用法,开窗函数,over子句,over开窗函数

    https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx https://social.msdn.microsoft.c ...

  9. 【转】SQL SERVER 开窗函数简介

    在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...

随机推荐

  1. iptables rc.firewall脚本代码

    #!/bin/sh # # rc.firewall - Initial SIMPLE IP Firewall script for Linux 2.4.x and iptables # # Copyr ...

  2. CF351E Jeff and Permutation

    CF351E Jeff and Permutation 贪心好题 考虑每个对能否最小化贡献和 先不考虑绝对值相同情况 发现,对于a,b假设|a|<|b|,那么有无贡献只和b的正负有关!如果a在b ...

  3. BZOJ 4236 "JOIOJI"(前缀和+map+pair)

    传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R] ...

  4. CentOS服务器安装mysql

    1.配置YUM源 下载mysql源安装包 [root@localhost~]#wget http://dev.mysql.com/get/mysql57-community-release-el7-8 ...

  5. Web中的通配符

    /**的意思是所有文件夹及里面的子文件夹 /*是所有文件夹,不含子文件夹 /是web项目的根目录     http://www.coderanch.com/t/364782/Servlets/java ...

  6. Linux 内核注册一个 USB 驱动

    所有 USB 驱动必须创建的主要结构是 struct usb_driver. 这个结构必须被 USB 驱动填 充并且包含多个函数回调和变量, 来向 USB 核心代码描述 USB 驱动: struct ...

  7. codeforces 11D(状压dp)

    传送门:https://codeforces.com/problemset/problem/11/D 题意: 求n个点m条边的图里面环的个数 题解: 点的范围只有19,很容易想到是状压. dp[sta ...

  8. IDEA Maven创建多个Module相互依赖

    1.前言 在大型企业项目中,系统架构复杂多变,一个项目根本无法支撑起所有业务.为了提高项目扩展性.灵活性.重用性,封装性,将项目分为多个Module是非常必要的. 这里就不说IDEA如何安装了,安装好 ...

  9. 【Jenkins】pipeline-hello-world项目

    1.New Item 2.Pipeline Definition 3.Build Error 4.Solution 5.Console Output

  10. 不同RAM空间存储变量区分