查询成绩最好的前两名_窗口查询

一、窗口函数基本语法:

‹窗口函数› over (partition by ‹用于分组的列名› order by ‹用于排序的列名›)

二、专用窗口函数——rank、dense_rank、row_number

1、基本用法

Select * ,rank() over (partition by <用于分类的列名> order by <用于排序的列名>) as rank from <表名>

注:函数后面的括号不需要任何参数

2、区别

对于 90、90 、90 、80降序排名

Rank:1、1、1、4

Dense_rank :1 、1 、1 、2

Row_number :1 、2、 3、 4

例题(排名问题):查询各科成绩前两名的记录

SELECT * from (

select *,rank() over (partition by 课程号 order by 成绩 )as "rank"

from score

) as s1

where s1.rank < 3

三、聚合窗口函数

Select * ,

sum(成绩) over (order by 学号) as current_sum ,

avg(成绩) over (order by 学号) as current_avg ,

count(成绩) over (order by 学号) as current_count ,

max(成绩) over (order by 学号) as current_max ,

min(成绩) over (order by 学号) as current_min

from class

23cfbdc5a507f3b2f1ca088db398e648.png

聚合函数做窗口函数,可以显示截至到本行数据,统计数据的情况,可以看出每一行数据,对整体统计数据的影响

例题(累计求和问题):

按照雇员编号升序排序,查找薪水的累计和。其中累计薪水是前N个当前员工(结束日期=‘9999-01-01’)的薪水的累计和。

select 雇员编号,薪水,

sum(薪水) over (order by 雇员编号) as 累计薪水

from 雇员表

where 结束时间 = '9999-01-01'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值