SqlServer窗口函数

SqlServer窗口函数

Rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

Rank() over 用于指定条件后的进行排名.特点是对指定栏位的排名可以使用本函数,因为,如果出现两个相同的值,它会将其分为一组,同时将下一个栏位所占名次空出来

例:

SELECT
name,
subject,
score,
rank ( ) OVER ( partition BY subject ORDER BY score DESC ) rank
FROM
student_score;

SqlServer窗口函数_第1张图片

注意:RANK() OVER() NULL值是最大

**可以通过:**rank() over(partition by course order by score desc nulls last)来规避NULL值

dense_rank() over(partition by 分组栏位名 order by 排序栏位名 desc)

dense_rank() over 与 rank() over的区别:前者并不会空出所占栏位数(也就是两个数值同用一个栏位数,那么下一个不同数值将占用前一个数值的栏位数),后者继续依照栏位数往下依次排列(栏位虽然并列,但是并列后的栏位会空出)

例:

SELECT
name,
subject,
score,
dense_rank ( ) OVER ( partition BY subject ORDER BY score DESC ) rankfrom student_score;

SqlServer窗口函数_第2张图片

row_number() over(partition by 分组栏位名 order by 排序栏位名 desc)

row_number() over这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排列

SELECT
name,
subject,
score,
row_number ( ) OVER ( partition BY subject ORDER BY score DESC ) rankfrom student_score;

SqlServer窗口函数_第3张图片

你可能感兴趣的:(sql,sqlserver,数据库,sql)