声明:本篇文章是紧接着上一篇文章《》而写的,为了加深自己对RANK()函数和DENSE_RANK()函数的理解,我从网上找了一个例子,自己测试写代码,于是有了下面的文章。例子链接:http://www.docin.com/p-1770949.html 有兴趣的同学可以看看。谢谢~
--已知两种排名方式(分区和不分区):使用和不适用PARTITION
--两种计算方式(连续、不连续),对应函数:DENSE_RANK(),RANK()
1) 建表 T_SCORE
CREATE TABLE "JWXT"."T_SCORE"
( "S_ID" VARCHAR2(255),
"S_NAME" VARCHAR2(255),
"SUB_NAME" VARCHAR2(255),
"SCORE" NUMBER(5,2)
)
2)查询各学生科目为Oracle排名(简单排名)
对比RANK()与DENSE_RANK():非连续排名与连续排名(都是简单排名):
3) 查询各学生各科排名(分区排名)
4) 查询各科前2名(分区排名)
类似:新闻表:求栏目点击率在前3位的新闻; 商品表:求各类别销售额在前10位的商品
使用DENSE_RANK()与RAN()的区别:
5) 查询各同学总分
SELECT A.S_ID, A.S_NAME, SUM(A.SCORE) TOTALSCORE
FROM T_SCORE A
GROUP BY A.S_NAME, A.S_ID
ORDER BY TOTALSCORE DESC;
总结:
1、语法:RANK() OVER (ORDER BY 排序字段 顺序)
RANK() OVER (PARTITION BY 分组字段 ORDER BY 排序字段 顺序)
2、顺序:ASC|DESC
3、分区字段:根据什么字段进行分区
问题:
1、分区与分组有什么区别?
答案:分区只是将原始数据进行名次排列(记录数不变);分组分组是对原始数据进行聚合统计(记录数变少,每组返回一条),注意:聚合。