博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql排名函数--四个
阅读量:4695 次
发布时间:2019-06-09

本文共 1460 字,大约阅读时间需要 4 分钟。

1 row_number

2 rank

3 dense_rank

4 ntile

例子如下:

select * into #MyTable

from
(select '语文' as 课程,70 as 成绩
union all
select '数学' ,80
union all
select '数学' ,80
union all
select '英语' ,90
union all
select '英语' ,100
union all
select '英语' ,70
) as tb

 

课程   成绩

---- -----------
语文   70
数学   80
数学   80
英语   90
英语   100
英语   70

 

select 成绩

,row_number()over( order by 成绩 desc) as row_number
,rank() over( order by 成绩 desc) as rank
,dense_rank()over( order by 成绩 desc) as dense_rank
,ntile(4) over( order by 成绩 desc) as ntile
from #MyTable

结果如下

成绩          row_number           rank                 dense_rank           ntile

----------- -------------------- -------------------- -------------------- --------------------
100         1                    1                    1                    1
90          2                    2                    2                    1
80          3                    3                    3                    2
80          4                    3                    3                    2
70          5                    5                    4                    3
70          6                    5                    4                    4

分析:

1 row_number   不论函数的值是什么都一直排序。

2 rank   对于相同的值会并列排名,然后跳过须后继续排名。

3 dense_rank  对于相同的值会并列排名,然后会按序号继续排名,不会跳过序号排名。

ntile 将数据分成若干块,主要用于分析 ?

 

 当然还可以在 row_number()over()中加入partition by 在小组中分别排名:

 

select 课程,成绩

,row_number()over( partition by 课程 order by 成绩 desc) as row_number
,rank() over( partition by 课程 order by 成绩 desc) as rank
,dense_rank()over( partition by 课程 order by 成绩 desc) as dense_rank
,ntile(4) over( partition by 课程 order by 成绩 desc) as ntile
from #MyTable

 

课程   成绩          row_number           rank                 dense_rank           ntile

---- ----------- -------------------- -------------------- -------------------- --------------------
数学   80          1                    1                    1                    1
数学   80          2                    1                    1                    2
英语   100         1                    1                    1                    1
英语   90          2                    2                    2                    2
英语   70          3                    3                    3                    3
语文   70          1                    1                    1                    1

转载于:https://www.cnblogs.com/yachao1120/p/6720410.html

你可能感兴趣的文章
HDU 3578 Greedy Tino(双塔DP)
查看>>
HDU 1103 Flo's Restaurant(模拟+优先队列)
查看>>
游戏机生产厂家世界OL敏枪如何玩 敏枪玩法攻略
查看>>
瀑布流
查看>>
s.t.
查看>>
2016年10月30日--JavaScript语法
查看>>
MiCode 40: 找小“3”
查看>>
四则运算1.0版本
查看>>
我喜欢的必应词典每日一句(持续更新中……)
查看>>
第六章 面向对象的程序设计
查看>>
leetcode - Longest Consecutive Sequence
查看>>
20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8
查看>>
常用JS大全
查看>>
JAVA-多线程
查看>>
常用加密算法
查看>>
MYSQL培训准备(2):MYSQL自增长陷阱
查看>>
IDEA 创建普通的maven+java Project
查看>>
背包专题练习
查看>>
Python学习笔记(二)
查看>>
T-SQL: Create folders in remote server by sql statement
查看>>