一、什么是开窗函数

开窗函数/分析函数:over()
       开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。
开窗函数的调用格式为:

函数名(列名) OVER(partition by 列名 order by列名)

如果你没听说过开窗函数,看到上面开窗函数的调用方法,你可能还会有些疑惑。但只要你了解聚合函数,那么理解开窗函数就非常容易了。
       我们知道聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等,这些函数常与group by子句连用。除了 COUNT 以外,聚合函数忽略空值。
       但有时候一组数据只返回一组值是不能满足需求的,如我们经常想知道各个地区的前几名、各个班或各个学科的前几名。这时候需要每一组返回多个值。用开窗函数解决这类问题非常方便。
       开窗函数和聚合函数的区别如下:
       (1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。
       (2)聚合函数每组只返回一个值,开窗函数每组可返回多个值。

注:常见主流数据库目前都支持开窗函数,但mysql数据库目前还不支持。

二、常见面试题

1. 分区排序:row_number () over()
有如下学生成绩表:students_grades

查询每门课程course_name前三名的学生姓名及成绩,要求输出列格式如下:
course_name, number, stu_name, grades
查询语句如下:

2.几个排序函数row_number() over()、rank() over()、dense_rank() over()、ntile() over()的区别

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

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

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

(4) ntile( n ) over():可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。

学生成绩表同上,查询语句如下:

查询结果如下:

原博客原址:https://www.douban.com/group/topic/155112949/

数据分析(SQL)常见面试题:开窗函数相关推荐

  1. java常见手写sql面试题_java sql常见面试题

    为管理学员培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号.学员姓名.所属单位.学员年龄 C (C#,CN ) C#,CN 分别代表课程编号.课程名称 SC ...

  2. 每日新老客户数统计--sql 常见面试题(二)

    按购买时间统计出每天的新客人数和老客人数 名词定义如下: 新客:当天有购买,且之前没有购买的人为新客,新客人数+1 老客:当天有购买,且之前也有购买的人为老客,老客人数+1 1)每个用户最近一次购买日 ...

  3. 算法面试必备-----数据分析常见面试题

    算法面试必备-----数据分析常见面试题 算法面试必备-----数据分析常见面试题 1.统计学问题 问题:贝叶斯公式复述并解释应用场景 问题:朴素贝叶斯的理解 问题:参数估计 问题:极大似然估计 问题 ...

  4. SQL server 常见面试题

    Sql server常见面试题 受用了 1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 ...

  5. sql语句常见面试题

    sql语句常见面试题 1.建表 (1)student学生信息表 CREATE TABLE student (id INT (20) NOT NULL,NAME VARCHAR (20) NOT NUL ...

  6. 分享 Python 常见面试题及答案(下)

    程序IT圈 www.cxyquan.com 优秀程序猿技术公众号 之前分享了一篇很全的Java的面试题 分享 Java 常见面试题及答案(上) 分享 Java 常见面试题及答案(下) 由于篇幅过长,这 ...

  7. mysql某个表的列除以2_mysql常见面试题(二)

    mysql常见面试题(二) 标签:范式 索引 复制原理 事务引擎 储存结构 内存分配 1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库 ...

  8. python工程师-史上最全Python工程师常见面试题集锦,有这一份就够了

    从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这进程内,链接别的服务器进程的通信端口进行通信.在Python程序员找工作的时候, ...

  9. python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了

    从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这进程内,链接别的服务器进程的通信端口进行通信.在Python程序员找工作的时候, ...

最新文章

  1. 禁止缩放safari浏览器--阻止双击放大--阻止双指掐捏放大-
  2. matlab 取消figure显示时在屏幕最前
  3. javascript 之----eval的用法
  4. 【python】 time模块和datetime模块详解 【转】
  5. MacPort 的使用
  6. STM32F103:一.(3)IO方向
  7. 我是如何做Web项目的
  8. 蓝桥杯 ALGO-93 算法训练 反置数
  9. JDK 8_jstack命令使用
  10. 0322Private strand flush not complete
  11. 移动警务通GIS应用系统建设方案
  12. 计算机源代码英语,计算机源代码编写规范(国外英文资料).doc
  13. 计算机二级excel常见函数函数多表求和,excel sumif函数多条件求和 sumif的高级用法:跨多表条件求和...
  14. 微信公众账号调取用户昵称和用户头像
  15. 软考系统集成项目管理工程师全真模拟题
  16. C#长链接转短链接(调用新浪api)
  17. C语言回调函数的定义和写法
  18. AUTOCAD——快速选择
  19. Java毕设项目大学生创业众筹系统(java+VUE+Mybatis+Maven+Mysql)
  20. IMAS辅导书籍推荐

热门文章

  1. brew php7 intl_brew安装php7
  2. Dubbo:RPC原理
  3. IPv4地址和IPv6地址的比较,IPv6地址及其表示
  4. Java SSM篇3——Mybatis
  5. base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题
  6. normalize函数_Pandas 数据处理(一) —— 几个简单函数掌握!
  7. 电脑时间校对器_笔记本电脑如何保养?华为教你五招轻松延长使用时间
  8. usd php 换算,货币在PHP中从INR转换为USD
  9. python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...
  10. 经典数据结构——堆的实现