MYSQL学习笔记(3)——窗口函数

题目复盘——窗口函数

题源牛客网——记录一下自己的学习

部分窗口函数知识复盘

窗口函数大全补充[http://t.csdn.cn/xJGxx]
窗口函数只能用在SELECT后

1.专用窗口函数

rank、dense_rank、row_number

①rank、dense_rank

rank:并列的项名词相同,且按照个数跳过后面的名次。e:1、2、3、3、5

 rank () over (partition by 分组字段名
	            order by 排序字段名
	             rows between 1 preceding and 1 following)

rows(行)、preceding(之前)、following(之后)指定几条记录为一个框架,可以用于计算移动平均值
dense_rank:并列的项名词相同,不跳过后面的名次。e:1、2、3、3、4

②row_number

生成唯一的连续排序:1、2、3、4、5
窗口函数无需参数,因此通常括号里都是空的。

2.能作为窗口函数的聚合函数

sum,avg,count,max,min
这里括号里就不是空的了,需要添加计算的字段。

 sum(计算字段) over (order by 排序字段) as current_sum,
   avg(计算字段) over (order by 排序字段) as current_avg,
   count(计算字段) over (order by 排序字段) as current_count

sum——从上到下累加效果
avg——从上到下平均值
count——累计几个了
max——累计到此最大的数
min——累计到此最小的数

这篇总结的很好:http://t.csdn.cn/LKa7e

SQL27 每类试卷得分前3名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题分析

(1)有新的ranking列——窗口函数——rank()over(partition by order by);
(2)每类试卷得分前三名——得分前三名的人,不是找top3分数;
(3)三个排序条件——max(score),min(score),uid ;
(4)每一类每个人的max和min——group by tag,uid;

答案重写

SELECT tid,uid,ranking FROM
(SELECT e_i.tag tid,e_r.uid uid,rank()over(partition by e_i.tag
                           order by max(score) desc,min(score) desc,e_r.uid desc</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值