实战 | 利用SQL “窗口函数” 分析高(三)班学生考试成绩和生活消费!(一)

简介: 实战 | 利用SQL “窗口函数” 分析高(三)班学生考试成绩和生活消费!(一)

一、背景介绍

今天,野鸡大学高(三)班的月考成绩出来了,这里先给大家公布一下各位同学的考试成绩。

image.png

接着,在给大家公布一下各位同学的生活消费情况。

image.png

下面我们利用上述考试成绩和生活消费记录,利用mysql做一个简单的分析。


当然,从本文标题就可以看出来。本文就是要结合这份数据,为大家讲述SQL “窗口函数” 应该怎么用?


从上面这张图,应该知道这个知识点的重要性了。包括你以后学习hive或者oracle数据库,或者说数据分析面试,这都将是一个很重要的知识点。


二、建表语句和插入数据

创建表格


create table exam_score(
    sname varchar(20),
    age int,
    subject varchar(20),
    score varchar(20)
)charset=utf8;
# ----------------------- #
create table cost_fee(
    sname varchar(20),
    buydate varchar(20),
    buycost int
)charset=utf8;


插入数据


insert into exam_score values
('张三' , 18, '语文' , 90),
('张三' , 18, '数学' , 80),
('张三' , 18, '英语' , 70),
('李四' , 21, '语文' , 88),
('李四' , 21, '数学' , 78),
('李四' , 21, '英语' , 71),
('王五' , 18, '语文' , 95),
('王五' , 18, '数学' , 83),
('王五' , 18, '英语' , 71),
('赵六' , 19, '语文' , 98),
('赵六' , 19, '数学' , 90),
('赵六' , 19, '英语' , 80);
# ----------------------- #
insert into cost_fee values
('张三','2019-01-01',10),
('张三','2019-03-03',23),
('张三','2019-02-05',46),
('李四','2019-02-02',15),
('李四','2019-01-07',50),
('李四','2019-03-04',29),
('王五','2019-03-08',62),
('王五','2019-02-09',68),
('王五','2019-01-11',75),
('赵六','2019-02-08',55),
('赵六','2019-03-10',12),
('赵六','2019-01-12',80);


三、窗口函数分类介绍

在正式讲述 “窗口函数” 应用之前,我这里先带着大家梳理一遍 “窗口函数” 的基础。我们可以将窗口函数分为如下几类:


聚合函数 + over()搭配;

排序函数 + over()搭配;

ntile()函数 + over()搭配;

偏移函数 + over()搭配;

具体每一类,有哪些函数呢?观察下面的思维导图。

image.png


对于over()里面,这里还有两个常用的关键字,必须要讲述。如下:


partition by + 字段:你可以想象成group by关键字,就是用于 “分组” 的关键字;

order by + 字段:这个更容易理解,就是用于 “排序” 的关键字;

四、窗口函数应用

上面给大家介绍了若干常用的 “窗口函数”,这里利用文首创建的数据,讲讲 “窗口函数” 的应用。


希望大家通过每个案例,来总结一下每个函数的含义,这里就不详细写了。


1. 聚合函数 + over()搭配

① 计算每位同学的得分与平均值的情况

select 
  sname
    ,subject
    ,score
    ,avg(score) over(partition by sname) as avg_score
from
  exam_score


结果如下:

image.png


② 计算每位同学1-3月消费情况和消费总额

select
  sname
    ,buydate
    ,buycost
    ,sum(buycost) over(partition by sname) as sum_cost
from
  cost_fee


结果如下:

image.png


③ 计算每位同学1-3月消费情况和累计消费总额

select
  sname
    ,buydate
    ,buycost
    ,sum(buycost) over(partition by sname order by buydate) as sum_cost
from
  cost_fee


结果如下:

image.png

注意: 结合②③,大家可以发现partition by结合order by,与不结合order by,得到的完全是不同的结果。一个是分组求总和(不加order by);一个是分组求累计和(加order by)。


2. 排序函数 + over()搭配

① 计算每个科目的排名,相同的分数排名不同,顺序依次增加

select
  sname
  ,subject
  ,score
    ,row_number() over(partition by subject order by score) rank1
from
  exam_score


结果如下:

image.png

相关文章
|
1月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
59 3
|
1月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
51 0
|
2月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
2月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
2月前
|
SQL 监控 关系型数据库
SQL语句性能分析:实战技巧与详细方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
2月前
|
SQL 数据库
SQL:如何使用窗口函数实现高效分页查询??
SQL:如何使用窗口函数实现高效分页查询??
36 0
|
2月前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作
|
2月前
|
SQL 存储 Java
sql注入原理与实战(二)数据库原理
sql注入原理与实战(二)数据库原理
|
2月前
|
SQL 前端开发 安全
sql注入原理与实战(一)
sql注入原理与实战(一)