🍊今天复习一下mysql中的窗口函数,主要是通过几道练习题复习和加深一下对窗口函数的理解,对往期内容感兴趣的同学可以参考如下内容👇:
- 链接: 牛客SQL大厂真题——某音短视频.
- 链接: 京东数据分析SQL面试题.
- 链接: 百度用户增长SQL面试题.
🌰话不多说,让我们开始今日份的学习吧。
MySQL中的窗口函数(Window Functions)是一种用于计算和分析数据集中的子集的函数,这些函数在计算聚合值时可以对数据进行分组、排序、过滤等操作。它们与GROUP BY语句不同,GROUP BY语句只能进行一次分组,而窗口函数可以根据不同的条件进行多次分组。
窗口函数可以使用OVER子句指定分组、排序和窗口的范围。通常情况下,窗口函数可以分为三类:排名函数、聚合函数和分析函数。
排序函数用于计算数据集中某个值在排序后的位置或排名。在MySQL中,常见的排序函数包括:
- RANK():计算排名,并且当值相同时会出现“并列排名”。
- DENSE_RANK():计算排名,如果有并列排名则会跳过排名,下一个排名不会重复。
- ROW_NUMBER():计算每行的行号。
聚合函数用于对分组数据进行计算,例如计算分组中的平均值、总和、最大值和最小值等。常见的聚合函数包括:
- SUM():计算分组中所有数值的总和。
- AVG():计算分组中所有数值的平均值。
- COUNT():计算分组中的记录数。
- MAX():计算分组中所有数值的最大值。
- MIN():计算分组中所有数值的最小值。
分析函数用于在保持数据集原有排序的情况下计算某个值。常见的分析函数包括:
- LAG():返回指定行之前的某一行。
- LEAD():返回指定行之后的某一行。
- FIRST_VALUE():返回第一个值。
- LAST_VALUE():返回最后一个值。
- NTILE():将分组划分为相同大小的桶,返回桶的编号。
窗口函数提供了更灵活、更高效的数据分析功能,可以帮助我们更好地理解数据,找到数据中的趋势和规律。
本次来做几道比较有意思的sql题,题目来源于牛客网,这几道题的通过率大多都在30%以下,于是自己亲自做了尝试,觉得很有参考价值。
链接: 进阶篇的窗口函数练习
解题思路:我们还是对最终的答案进行一步一步拆解,首先找到用户在某一门考试下的最小分数和当前排名,第二个子查询查找出某一个用户在某一门考试下的最高分,也就每一门考试只保留一个用户的最高分,最后再根据要求取前3名排序输出即可。