一、窗口函数

1、窗口函数的函义和作用

窗口函数也称为OLAP函数,可以对数据库数据进行实时分析处理;可以处理如下问题:

  • 排名问题:每个部门按业绩来排名
  • topN问题:找出每个部门排名前N的员工进行奖励

2、基本语法

<窗口函数>的位置可以放以下两种函数:

  • 专用窗口函数,包括rank,dense_rank,row_number等
  • 聚合函数,如sum,avg,count,max,min等

因为窗口函数是对where或group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在select 子名中。

3、窗口函数的功能:

  • 同时具有分组和排序的功能
  • 不减少原表的行数

4、专用窗口函数(rank,dense_rank,row_number)

以rank为例:对表中每个班级的成绩进行排名

  • partition by 用来对表分组,partition子句省略表示不指定分组。(group by 分组汇总改变行数;partition by 分组汇总行数不变)
  • order by 对分组后的结果进行排序
  • 专用函数后面的()不需要任何参数

rank,dense_rank,row_number的区别

rank函数:如果有并列名次的行,会占用下一名次的位置,如“1,1,1,4”

dense_rank函数:如果有并弄名次的行,不占用下一名次的位置,如“1,1,1,2”

row_number函数:不考虑并列名次的行,直接排序,如“1,2,3,4”

4、聚合窗口函数

与专用窗口函数类似,聚合函数后面括号里需要指定具体的列名。

使用聚合窗口函数计算出来的值都是针对自身记录和自身记录以上的数据。

5、窗口函数的平均移动

以聚合窗口函数avg为例

rows和preceding这两个关键字表示的意思为“之前...行”,上面句子中rows 2 preceding表示为自身记录及前2行的平均。

二、案例

1、排名问题

问:现在需要按成绩来排名,如果两个分数相同,那么排名要是并列的

2、topN问题

数据:

INSERT INTO 成绩表 VALUES('张三','语文','90');
INSERT INTO 成绩表 VALUES('李四','语文','81');
INSERT INTO 成绩表 VALUES('王五','语文','79');
INSERT INTO 成绩表 VALUES('赵六','语文','88');
INSERT INTO 成绩表 VALUES('张三','数学','85');
INSERT INTO 成绩表 VALUES('李四','数学','86');
INSERT INTO 成绩表 VALUES('王五','数学','92');
INSERT INTO 成绩表 VALUES('赵六','数学','83');
INSERT INTO 成绩表 VALUES('张三','英语','87');
INSERT INTO 成绩表 VALUES('李四','英语','98');
INSERT INTO 成绩表 VALUES('王五','英语','93');
INSERT INTO 成绩表 VALUES('赵六','英语','95');

问:从上表查找出每个学生最高的2个科目

思路:

1、按学生的姓名来分组

2、分组后按成绩降序排列,取成绩最高的2个科目

3、选择使用row_number()专用窗口函数

3、在每个组里比较的问题

问:查找单科成绩高于该科目平均成绩的学生名单

思路:

1、按学生的科目来分组

2、使用avg()聚合窗口函数求得平均成绩

3、使用子查询找出大于平均成绩的单科成绩

4、累计求和问题

数据

INSERT INTO 确诊人数表 VALUES('2020-02-12','1');
INSERT INTO 确诊人数表 VALUES('2020-02-13','3');
INSERT INTO 确诊人数表 VALUES('2020-02-14','7');
INSERT INTO 确诊人数表 VALUES('2020-02-15','11');
INSERT INTO 确诊人数表 VALUES('2020-02-16','20');
INSERT INTO 确诊人数表 VALUES('2020-02-17','35');
INSERT INTO 确诊人数表 VALUES('2020-02-18','50');

问:查找出每日累计确诊人数

三、存储过程

1、无参数的存储过程

begin...end用于表示sql语句的开始和结束;<sql语句>就是重复使用的sql语句

2、有参数的存储过程

getnum是存储过程的名称,后面括号里面的num varchar(100)是参数,参数由参数名称num和参数类型varchar(100)构成,这里表示字符串类型。

存储过程里面的sql语句(where 学号 = num) 使用了参数num。

3、默认参数的存储过程

in 输入参数:参数初始值在存储进程前被指定为默认值,在存储过程中修改该参数的值不能被返回

out输出参数:参数初始值为空,该值可在存储过程中补改变,并可返回。

inout输入输出参数:参数初始值在存储过程前被指定为默认值,并且可在存储过程中被改变,在调用完毕后可被返回。

4、注意事项

  • 定义存储过程语法里的sql语句代码块必须是完整的sql语句,必须用“;”结尾
  • 定义不同的存储过程,要使用不同的存储过程名称,相同的存储过程名称会报错。

sql两个in并列_SQL窗口函数相关推荐

  1. sql查询三级菜单分类_SQL面试50题——思路解答与分类整理(中)窗口函数与子查询...

    让我们每天都进步一点点 题目快速查找索引 阅读指南 上篇:SQL面试50题--思路解答与分类整理(上)聚合函数与表连接 [第一部分]聚合函数(sum/avg/count/min/max) [第二部分] ...

  2. sql取整数_SQL 窗口函数

    一 什么是窗口函数 窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理. 基本语法 ‹窗口函数› over (pa ...

  3. 可以对窗口函数之后再加条件_SQL 窗口函数——解决实际问题

    窗口函数是指什么?为什么要用它?怎么用?有哪些经典的案例? 1)窗口函数是什么? 窗口函数是OLAP(online analytical processing),顾名思义,可以对数据库内的数据实时分析 ...

  4. sql server累计求和函数_窗口函数 以及 储存过程 create procedure

    窗口函数-常见用法,每组内排名 比如,找出每个部门工资前三高的员工等 什么是窗口函数 窗口函数,OLAP函数,online analytical processing,联机分析处理,可以对数据库数据进 ...

  5. SQL Server 2005合并列成字符串 2008-11-07

    SQL Server 2005合并列成字符串 2008-11-07 如果要将数据中的某一列合并成字符串,形成 A,B,C 这样的格式的话,一般性代码如下 DECLARE @str nvarchar(4 ...

  6. SQL两张表如何关联

    SQL两张表如何关联查询 比如:我有table1 和 table2 两张表table1: id name sex 1 张三 男 2 李四 女 3 王五 男table2: ...比如:我有table1 ...

  7. LATEX——两张图并列排列/双栏模板中图片通栏并列布局

    LATEX--两张图并列排列/双栏模板中图片通栏并列布局 正常插入图片 并列插入两张图片 双栏模板中图片通栏并列布局1(不同图片使用不同标题,不同编号) 双栏模板中图片通栏并列布局2(不同图片使有不同 ...

  8. Android 两个view并列显示

    两个view并列显示,第二个view跟在第一个view的后面,如果长度过长,则第一个view宽度缩小. 直接上代码  用就完了! public class TextWithImageLayout ex ...

  9. 两个div并列一行显示的多种方法

    以下提供了5种实现两个div并列一行显示的方法,其中最常用的为浮动,还有定位等方法可以实现. 方法一:float浮动,float:left;为左浮动,也可以设置为float:right;右浮动,也可以 ...

最新文章

  1. USTC English Club Note20171015(5)
  2. Spring Boot定时任务-Quartz介绍
  3. Tengine+LUA+Nginx-GridFS+jemalloc编译安装
  4. Gradle入门:简介
  5. SmartPDA图片
  6. 【剑指offer】面试题25:合并两个排序的链表(Java)
  7. angularjs金额大写过滤器
  8. cssrem转换工具_微信小程序开发-rem转换rpx小工具
  9. EasyAndroid基础集成组件库之:EasyPhoto (单张)图片选择库
  10. PWA 应用列表及常用工具
  11. 抽奖 java_年会抽奖程序 java开发 可内定中奖人员 一键导入员工 使用简单
  12. 截止失真放大电路_反馈/反馈电路/反馈类型的判别方法
  13. Python list 列表方法
  14. 使用poi替换ppt文件内的变量参数,包含ppt和pptx格式
  15. Mybatis缓存探索,查询集合后修改内容,再次执行sql查询结果发现是被修改过的
  16. 最新某宝x-sign参数生成原理
  17. Shiro--解决is not eligible for getting processed by all BeanPostProcessors
  18. 关于聚类算法Kmeans/K-mediods/层次聚类/OPTICS较为详细的介绍
  19. 微信开挂怎么防止封号_微信大规模封号,这个外挂别再用了
  20. css ul li 图标 图片位置定位 背景定位

热门文章

  1. lisp 多段线转面域_Objectarx 相交矩形求并集 面域转多段线
  2. webpack debug
  3. docker删除为none的镜像
  4. XML入门经典(第4版)pdf
  5. tensorflow conv2d的padding解释以及参数解释
  6. 将PHP作为Shell脚本语言使用
  7. Character,String相关方法,Int,double互相转换
  8. 模板方法(Template Method)
  9. mysql查第二行,MYSQL查找第二行具有给定值的所有行
  10. 学python电脑要装什么_初学 Python 需要安装哪些软件?