学习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;