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

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

② 计算每个科目的排名,相同的分数排名相同,余下排名跳跃增加

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


结果如下:

image.png


③ 计算每个科目的排名,相同的分数排名相同,余下排名顺序增加

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


结果如下:

image.png


3. ntile()函数 + over()搭配

ntile()函数有点乱入的感觉,你不知道给它分哪一类。该函数主要用 “数据切分”。如果说这个函数还有点用的话,就是他也可以对数据进行排序,类似于上面提到的row_number()函数。


① 对exam_score表,进行整张表切分

select
  sname
  ,subject
  ,score
    ,ntile(4) over() rank1
from
  exam_score


结果如下:

image.png

不信你下去试一下,ntile()里面不管写哪个数字,好像都可以。


② 对exam_score表,按照subject分组切分

select
  sname
  ,subject
    ,score
    ,ntile(4) over(partition by subject) rank1
from
  exam_score


结果如下:

image.png

即使是分组切分,你也会发现,这样毫无意义,因为score并没有排序。


② 对exam_score表,对score排序后,按照subject分组切分(最有用)

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


结果如下:

image.png

注意: 仔细观察这种用法,基本可以等效row_number()函数,效果是一样的。


4. 偏移函数 + over()搭配

① 展示各位同学的“上次购买时间”和“下次购买时间”

注:对于第一天,显示 “first buy”;对于最后一天,显示 “last buy”;


select
  sname
  ,buydate
    ,lag(buydate,1,'first day') over(partition by sname order by buydate) as 上次购买时间
    ,lead(buydate,1,'last day') over(partition by sname order by buydate) as 下次购买时间
from
  cost_fee


结果如下:

image.png


② 截止到当前日期,每位同学的“首次购买时间”和“最后一次购买时间”

select
  sname
  ,buydate
    ,first_value(buydate) over(partition by sname order by buydate) as 首次购买时间
    ,last_value(buydate) over(partition by sname order by buydate) as 最后一次购买时间
from
  cost_fee


结果如下:

image.png


③ 展示每位同学的“首次购买时间”和“最后一次购买时间”

注意: 这里并没有说 “截止到当前日期”,请注意②③之间的区别呀。需求不同,结果就不同。


select
  sname
  ,buydate
    ,first_value(buydate) over(partition by sname order by buydate) as 首次购买时间
    ,last_value(buydate) over(partition by sname ) as 最后一次购买时间
from
  cost_fee


结果如下:

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注入原理与实战(一)