栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

大厂SQL经典面试题(一)窗口函数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大厂SQL经典面试题(一)窗口函数

窗口函数是数据分析师常用的语法函数,几乎是大厂的必考题。

窗口函数,也叫OLAP(Online AnallyticalProcessing,联机分析处理) ,可 以对数据库数据进行实时分析处理。

下面给大家准备了两道经典的窗口函数题目。并准备了清晰的解题思路,具体可以看图片。

第一题:求连续天数

下面表格是用户访问表users,记录了用户id (usr_ id)和访问日期(log_ date),求出连续3天下面表格是用户访问表users,记录了用户id以上访问的用户id。

解题思路:

我们需要根据这么一个简单的表,求出连续3天以上访问的用户。可以按照用户id给访问日期排名,然后再用访问日期减去排名,得到一个时间。如果用户是连续访问的,这个时间就是一样的。一个用户的这个时间如果出现3次及以上,说明这个用户连续访问了3天。

第一步:

先按照用户id (usr_ id) 对访问日期(log date)进行排名,这里要用到DENSE_ RANK() 这个窗口函数,用于给出排名序号。这个函数经常应用在给学生成绩进行排名。

查看结果,多了一个rank_ id的列

第二步:

得到排名后,我们用访问日期减去排名,得到一个时间flg date。

第三步:

同一个用户有3个及以上flg date相同,说明用户连续访问了3天,所以我们对上面查出的这个结果进行分组,并统计判断是否大于3

第四步:

这样就已经得出最终结果了,因为题目只想知道usr_ id,我们最后再将usr_ id展示出来就可以了。

最终结果:

 第二题:找出工资前3高的员工(相同工资并列排名)

现在有Employee员工信息表和Department部门信息表,分别如下:

Employee员工信息表包括,每个员工对应的工号ld,姓名Name,工资Salary和部门编号Departmentld。

Department部门]信息表包含部门]对应的编号ID和部门名称Name。

编写一个SQL查询,找出每个部门获得前三高工资的所有员工

例如,根据上述给定的表,查询结果应返回:

解题思路:

这里要注意是细节是,最终结果输出的是前三高工资的所有员工,有些员工的工资是一样的,每个部门可能不止3名员工符合这个要求。

我们可以按照部门id (department_ id)给员工工资(salary) 排名,然后找出每个部门门前三高工资对应的所有员工。

最终具体代码如下:

专用窗口函数有: rank、 dense_ rank、row_ number

基本语法: < 窗口函数> over (partition by < 用于分组的列名 > order by < 用于排序的列名>)

over关键字用来指定函数执行的窗口范围,若后面括号中什么都不写,则意味着窗口包含满足WHERe条件的所有行,窗口函数基于所有行进行计算;

如果不为空,则支持以下4种语法来设置窗口。

  1. partition by子句:窗口按照哪些字段进行分组,窗口函数在不同的分组上分别执行
  2. order by子句:按照哪些字段进行排序,窗口函数将按照排序后的记录顺序进行编号
  3. frame子句: frame 是当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用
  4. window_ name:给窗口指定-一个别名。如果SQL中涉及的窗口较多,采用别名可以看起来更清晰易读。

如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,咱们下期见。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号