学习MySQL(五):窗口函数
点击蓝字,关注我
Every Day
芙蓉楼送辛渐
[作者] 王昌龄 [朝代] 唐
寒雨连江夜入吴,平明送客楚山孤。
洛阳亲友如相问,一片冰心在玉壶。
窗口函数介绍
窗口函数的引入是为了解决想要既显示聚集前的数据,又要显示聚集后的数据;窗口数对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
强调:使用MySQL 8.0版本方可实现
基本语法
函数名(列) over(选项) 选项为partition by 列 order by 列
解释:
over(partition by xxx) 按xxx分组的所有行进行分组
over(partition by xxx order by aaa) 按列xxx分组,按列aaa排序
over(order by aaa) 按aaa列排序
over括号中的partition by和order by的使用根据具体情况选择
-- 需求:计算每个学生的及格科目数
-- 使用聚合函数,类似数据透视表,原有表结构已发生变化
SELECT student_id,count( sid ) FROM score WHERE num >= 60 GROUP BY student_id;
<br>
-- 使用窗口函数,不会更改原表结构
SELECT student_id,count( sid ) over ( PARTITION BY student_id ORDER BY student_id ) AS 及格数
FROM score WHERE num >= 60;