数据分析(SQL)常见面试题:开窗函数
一、什么是开窗函数
开窗函数/分析函数: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)常见面试题:开窗函数相关推荐
- java常见手写sql面试题_java sql常见面试题
为管理学员培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号.学员姓名.所属单位.学员年龄 C (C#,CN ) C#,CN 分别代表课程编号.课程名称 SC ...
- 每日新老客户数统计--sql 常见面试题(二)
按购买时间统计出每天的新客人数和老客人数 名词定义如下: 新客:当天有购买,且之前没有购买的人为新客,新客人数+1 老客:当天有购买,且之前也有购买的人为老客,老客人数+1 1)每个用户最近一次购买日 ...
- 算法面试必备-----数据分析常见面试题
算法面试必备-----数据分析常见面试题 算法面试必备-----数据分析常见面试题 1.统计学问题 问题:贝叶斯公式复述并解释应用场景 问题:朴素贝叶斯的理解 问题:参数估计 问题:极大似然估计 问题 ...
- SQL server 常见面试题
Sql server常见面试题 受用了 1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 ...
- sql语句常见面试题
sql语句常见面试题 1.建表 (1)student学生信息表 CREATE TABLE student (id INT (20) NOT NULL,NAME VARCHAR (20) NOT NUL ...
- 分享 Python 常见面试题及答案(下)
程序IT圈 www.cxyquan.com 优秀程序猿技术公众号 之前分享了一篇很全的Java的面试题 分享 Java 常见面试题及答案(上) 分享 Java 常见面试题及答案(下) 由于篇幅过长,这 ...
- mysql某个表的列除以2_mysql常见面试题(二)
mysql常见面试题(二) 标签:范式 索引 复制原理 事务引擎 储存结构 内存分配 1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库 ...
- python工程师-史上最全Python工程师常见面试题集锦,有这一份就够了
从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这进程内,链接别的服务器进程的通信端口进行通信.在Python程序员找工作的时候, ...
- python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了
从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这进程内,链接别的服务器进程的通信端口进行通信.在Python程序员找工作的时候, ...
最新文章
- 禁止缩放safari浏览器--阻止双击放大--阻止双指掐捏放大-
- matlab 取消figure显示时在屏幕最前
- javascript 之----eval的用法
- 【python】 time模块和datetime模块详解 【转】
- MacPort 的使用
- STM32F103:一.(3)IO方向
- 我是如何做Web项目的
- 蓝桥杯 ALGO-93 算法训练 反置数
- JDK 8_jstack命令使用
- 0322Private strand flush not complete
- 移动警务通GIS应用系统建设方案
- 计算机源代码英语,计算机源代码编写规范(国外英文资料).doc
- 计算机二级excel常见函数函数多表求和,excel sumif函数多条件求和 sumif的高级用法:跨多表条件求和...
- 微信公众账号调取用户昵称和用户头像
- 软考系统集成项目管理工程师全真模拟题
- C#长链接转短链接(调用新浪api)
- C语言回调函数的定义和写法
- AUTOCAD——快速选择
- Java毕设项目大学生创业众筹系统(java+VUE+Mybatis+Maven+Mysql)
- IMAS辅导书籍推荐
热门文章
- brew php7 intl_brew安装php7
- Dubbo:RPC原理
- IPv4地址和IPv6地址的比较,IPv6地址及其表示
- Java SSM篇3——Mybatis
- base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题
- normalize函数_Pandas 数据处理(一) —— 几个简单函数掌握!
- 电脑时间校对器_笔记本电脑如何保养?华为教你五招轻松延长使用时间
- usd php 换算,货币在PHP中从INR转换为USD
- python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...
- 经典数据结构——堆的实现