partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,
partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。
partition by 与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。
Demo
数据库表结构 学生成绩表 UserGrade
Id int Checked 主键Id
Name varchar(50) Checked 学生名Course varchar(50) Checked 课程名Score int Checked 分数01、把每个人学生的成绩按照升序排名 (思路:根据学生姓名分组 根据每个人成绩排序)
sql语句
select *,ROW_NUMBER() over( partition by Name order by Score )排名
from UserGrade查询结果
Id Name Course Score 排名
1004 李四 数学 60 11005 李四 语文 80 21001 李四 英语 100 31007 王五 数学 30 11006 王五 语文 50 21003 王五 英语 50 31008 张三 英语 60 11000 张三 语文 80 21002 张三 数学 90 3
02、把每个学科的成绩分别进行排名 (思路:根据学科分组 根据成绩排序)
sql语句
select *,ROW_NUMBER() over( partition by Course order by Score )排名
from UserGrade查询结果
Id Name Course Score 排名
1002 张三 数学 90 11004 李四 数学 60 21007 王五 数学 30 31001 李四 英语 100 11008 张三 英语 60 21003 王五 英语 50 31000 张三 语文 80 11005 李四 语文 80 21006 王五 语文 50 3