普通分组函数
select ssex,count(1) from student group by ssex
行数改变,只展示统计结果
开窗函数 不改变行数,展示自己及自己在某一分组下的地位
查询所有人的姓名性别,并展示每个人在同一性别下按照年龄排序的序号
select sno,sname,ssex,row_number() over(partition by ssex order by sage) from student;
一、什么是开窗函数
开窗函数/分析函数关键词:over()
开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP
BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。
开窗函数的调用格式为:函数名(列名) OVER(partition by 列名 order by列名)
我们知道聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等,这些函数常与group by子句连用。
但有时候一组数据只返回一组值是不能满足需求的,如我们经常想知道各个地区的前几名、各个班或各个学科的前几名。这时候需要每一组返回多个值。用开窗函数解决这类问题非常方便。
开窗函数和聚合函数的区别如下:
(1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。