牛客SQL大厂面试真题 知识点总结 (二)
目录
2.3.1avg()over()用法解析:AVG() OVER() 是 SQL 中用于进行窗口函数计算的语法,允许在结果集的每一行上计算指定列的累积平均值。
2.4.1min()over()和max()over()用法解析:
前言:
当面对牛客SQL大厂面试真题,我们需要对SQL的各种知识点有全面的了解和掌握。这些知识点涵盖了SQL的各个方面 ,在面试中,能够熟练运用这些知识点,并且能够根据实际业务场景进行灵活应用,将会极大地提升我们的竞争力。
通过对这些知识点的系统总结和学习,我们将能够更加深入和全面地理解SQL,为未来在面试和实际工作中的应用打下坚实的基础。让我们一起努力,掌握SQL的精髓,展现出我们的技术实力和解决问题的能力!
1.窗口函数与聚合函数
窗口函数和聚合函数在数据库中常常一起使用,它们之间有一定的关系,但也有明显的区别
1.1窗口函数
1.1.1 窗口函数的作用及常见的窗口函数
窗口函数是一种特殊的SQL函数,可以用来对查询结果集中的某个子集进行计算。
窗口函数可以用来计算每一行与其相关联的行的聚合值,而不是整个结果集的聚合值。
窗口函数通常与OVER子句一起使用,以定义窗口的范围和排序方式。通过窗口的定义,可以灵活地控制窗口函数的计算范围。
一些常见的窗口函数包括ROW_NUMBER、RANK、DENSE_RANK、SUM、AVG等。
1.2 聚合函数
1.2.1聚合函数常见的作用
聚合函数是对数据集进行计算并返回单个值的函数,如SUM、AVG、COUNT等。
聚合函数通常用于对整个结果集进行计算,返回一个汇总值。
聚合函数会将结果集中的多行数据合并为一个值,例如计算总和、平均值、最大值、最小值等。
聚合函数通常与GROUP BY子句一起使用,用于按照指定的列对数据进行分组计算。
1.3窗口函数与聚合函数的关系 :
窗口函数可以在聚合函数内部使用,用于对聚合函数的结果进行进一步的处理或筛选。
在某些情况下,窗口函数和聚合函数可以实现类似的功能,但窗口函数更加灵活,可以提供更多的操作方式。
在实际使用中,可以根据需求选择使用窗口函数、聚合函数或它们的组合来实现所需的数据处理和分析操作。
2.常见的窗口函数(与聚合函数相结合)
2.1常见的与聚合函数结合的窗口函数
sum() over() min()over() avg()over() max()over()
2.2sum()over
2.2.1sum()over()用法解析:
当使用SUM() OVER()时,可以计算指定列的累积总和。
2.2.2具体案例:
假设我们有一个名为 sales
的表,包含销售数据,其中包括商品名称、销售日期和销售额。我们想要计算每个销售日期的销售额累积总和。
假设 sales
表的结构如下:
| product_name | sale_date | amount |
|--------------|------------|--------|
| Product A | 2024-01-01 | 100 |
| Product B | 2024-01-01 | 150 |
| Product A | 2024-01-02 | 200 |
| Product B | 2024-01-02 | 120 |
现在,我们可以使用 SUM() OVER()
来计算每个销售日期的销售额累积总和:
SELECT
product_name,
sale_date,
amount,
SUM(amount) OVER (PARTITION BY sale_date ORDER BY sale_date) AS total_amount
FROM
sales;
2.3avg()over()
2.3.1avg()over()用法解析:
AVG() OVER() 是 SQL 中用于进行窗口函数计算的语法,允许在结果集的每一行上计算指定列的累积平均值。
2.3.2具体案例:
假设我们有一个名为 student_scores
的表,包含学生的考试成绩数据,其中包括学生姓名、考试科目和成绩。我们想要计算每个学生的每门科目的成绩与该学生所有科目成绩的平均值。
假设 student_scores
表的结构如下:
| student_name | subject | score |
|--------------|------------|-------|
| Alice | Math | 85 |
| Alice | English | 78 |
| Bob | Math | 92 |
| Bob | English | 88 |
现在,我们可以使用 AVG() OVER()
来计算每个学生的每门科目的成绩与该学生所有科目成绩的平均值:
SELECT
student_name,
subject,
score,
AVG(score) OVER (PARTITION BY student_name) AS avg_score
FROM
student_scores;
2.4min()over和max()over()
2.4.1min()over()和max()over()用法解析:
当使用MIN() OVER()和MAX() OVER()时,可以分别计算指定列的累积最小值和最大值。
2.4.2具体案例 :
假设我们有一个名为 employee_salaries
的表,包含员工的薪资数据,其中包括员工姓名、部门和薪资。我们想要找出每个部门内薪资的最低值和最高值。
假设 employee_salaries
表的结构如下:
| employee_name | department | salary |
|---------------|------------|--------|
| Alice | Sales | 5000 |
| Bob | Sales | 5500 |
| Charlie | Marketing | 4800 |
| David | Marketing | 5200 |
现在,我们可以使用 MIN() OVER()
和 MAX() OVER()
来计算每个部门内薪资的最低值和最高值:
SELECT
employee_name,
department,
salary,
MIN(salary) OVER (PARTITION BY department) AS min_salary,
MAX(salary) OVER (PARTITION BY department) AS max_salary
FROM
employee_salaries;
结尾致谢:
感谢您阅读本篇文章,希望我所提供的 SQL 知识总结能对您有所帮助。如果您对 SQL 面试还有其他疑问或需要进一步了解,欢迎随时与我联系。祝您在未来的 SQL 面试和学习中取得优异的成绩!