oracle sql rankrank函数怎么用

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
EXCEL中如何用RANK函数来排名次
下载积分:300
内容提示:EXCEL中如何用RANK函数来排名次&#
精品文档,精心整理,有需..
文档格式:PDF|
浏览次数:427|
上传日期: 19:14:57|
文档星级:
该用户还上传了这些文档
EXCEL中如何用RANK函数来排名次
官方公共微信oracle中的排名函数用法 - 随风而行 - 博客园
^o^ 格言:相信没有做不到的事情,只有想不到的事情.
posts - 108, comments - 7, trackbacks - 0, articles - 16
rank,dense_rank,row_number,以及分组排名partition
rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4
dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,2,3
row_number:排名采用唯一序号连续值,例如1,2,3,4
partition:将排名限制到某一分组
row_number() over(partition by bb.channel_name order by sum(aa.dk_serv_num) desc nulls last) p1_rank1,row_number() over(order by sum(aa.dk_serv_num) desc nulls last) rank1,dense_rank() over(order by nvl(sum(aa.dk_serv_num), 0) desc) rank2,rank() over(order by sum(aa.dk_serv_num) desc nulls last) rank3
procedure GetCompetitionRanking(p_UserId in integer, p_CompetitionId in integer, v_cursor out CompetitionCursor)
tmp_startDate varchar2(12);
tmp_endDate varchar2(12);
v_sql1 varchar2(2000);
v_sql2 varchar2(2000);
v_where varchar2(1000);
select t.start_date, t.end_date into v_startDate, v_endDate from tbl_competition t petition_id = p_CompetitionId;
tmp_date:= v_endDate+1;
tmp_startDate := to_char(v_startDate, 'yyyy-mm-dd');
tmp_endDate := to_char(tmp_date, 'yyyy-mm-dd');
--group personal total
select count(1) into v_groupTotal from tbl_com_group_user a
_group_id in
_group_id from tbl_com_group_user b where b.user_id = p_UserId
-- Competition personal total
select count(1) into v_comTotal from
_group_id from tbl_com_group a petition_id = p_CompetitionId
) a inner join tbl_com_group_user b _group_id = b.com_group_
--user in competition ranking and group ranking
v_where := 't.DATA_TYPE_ID=1 AND t.STATUS=1 AND
t.DATA_DATE_1 &= TO_DATE('||chr(39)||tmp_startDate||chr(39)||','||chr(39)||'yyyy-mm-dd'||chr(39)||') AND
t.DATA_DATE_1 & TO_DATE('||chr(39)||tmp_endDate||chr(39)||','||chr(39)||'yyyy-mm-dd'||chr(39)||') ';
/*select no from
select a.USER_ID, dense_rank() over(order by sum(nvl(DATA_NUMBER_2, 0)) desc) no
select user_id from tbl_com_group a
left join tbl_com_group_user b _group_id = b.com_group_id
petition_id = 1
) a left join VM_MASTER_DATA t on a.user_id = t.user_id and t.DATA_TYPE_ID=1 AND t.STATUS=1 AND
t.DATA_DATE_1 &= TO_DATE('','yyyy-mm-dd') AND
t.DATA_DATE_1 & TO_DATE('','yyyy-mm-dd')
group by a.user_id
order by no desc
) where user_id = 165*/
v_sql1 := 'select no from
select a.USER_ID, dense_rank() over(order by sum(nvl(DATA_NUMBER_2, 0)) desc) no
select user_id from tbl_com_group a
left join tbl_com_group_user b _group_id = b.com_group_id
petition_id = '||p_CompetitionId||'
) a left join VM_MASTER_DATA t on a.user_id = t.user_id and '|| v_where||'
group by a.user_id
order by no desc
) where user_id = '||p_UserId;
dbms_output.put_line(v_sql1);
execute immediate v_sql1 into v_comR
dbms_output.put_line('------------------------------');
--dbms_output.put_line(v_comRanking);
/*select no from
select a.USER_ID, dense_rank() over(order by sum(nvl(DATA_NUMBER_2, 0)) desc) no
select a.user_id from tbl_com_group_user a
_group_id in
_group_id from tbl_com_group_user b where b.user_id = 165
) a left join VM_MASTER_DATA t on a.user_id = t.user_id and t.DATA_TYPE_ID=1 AND t.STATUS=1 AND
t.DATA_DATE_1 &= TO_DATE('','yyyy-mm-dd') AND
t.DATA_DATE_1 & TO_DATE('','yyyy-mm-dd')
group by a.user_id
order by no desc
where user_id=165*/
v_sql2 := 'select no from
select a.USER_ID, dense_rank() over(order by sum(nvl(DATA_NUMBER_2, 0)) desc) no
select a.user_id from tbl_com_group_user a
_group_id in
_group_id from tbl_com_group_user b where b.user_id = '||p_UserId||'
) a left join VM_MASTER_DATA t on a.user_id = t.user_id and '|| v_where||'
group by a.user_id
order by no desc
) where user_id = '||p_UserId;
dbms_output.put_line(v_sql2);
execute immediate v_sql2 into v_groupR
--dbms_output.put_line('------------------------------');
--dbms_output.put_line(v_groupRanking);
if v_comRanking is null then
v_comRanking := v_comT
if v_groupRanking is null then
v_groupRanking := v_groupT
open v_cursor for
select v_comTotal CompetitionPersonalTotal, v_groupTotal UserInGroupPersonTotal, v_comRanking UserInCompRanking, v_groupRanking UserInGroupR
when others thenOracle排名函数(Rank)实例详解
投稿:mdxy-dxy
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下
--已知:两种排名方式(分区和不分区):使用和不使用partition
--两种计算方式(连续,不连续),对应函数:dense_rank,rank
·查询原始数据:学号,姓名,科目名,成绩
select * from t_score
·查询各学生科目为Oracle排名(简单排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'
对比:rank()与dense_rank():非连续排名与连续排名(都是简单排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'
·查询各学生各科排名(分区排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over
(partition by sub_name order by score desc) 名次
from t_score sc
·查询各科前2名(分区排名)
·类似:新闻表,求栏目点击率在前3位的新闻。
商品表,求各类别销售额在前10位的商品。
select * from (
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank() over
(partition by sub_name order by score desc) 名次
from t_score sc
where x.名次&=2
·查询各同学总分
select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name
·根据总分查询各同学名次
select x.*,
rank() over (order by sum_score desc) 名次
select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name ) x
rank() over (order by 排序字段 顺序)
rank() over (partition by 分组字段 order by 排序字段 顺序)
1.顺序:asc|desc 名次与业务相关:
示例:找求优秀学员:成绩:降序 迟到次数:升序
2.分区字段:根据什么字段进行分区。
问题:分区与分组有什么区别?
·分区只是将原始数据进行名次排列(记录数不变),
·分组是对原始数据进行聚合统计(记录数变少,每组返回一条),注意:聚合。
create table t_score
autoid number primary key,
number(3),
s_name char(8) not null,
sub_name varchar2(20),
score number(10,2)
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (8, 1, '张三 ', '语文', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (9, 2, '李四 ', '数学', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (10, 1, '张三 ', '数学', 0);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (11, 2, '李四 ', '语文', 50);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (12, 3, '张三丰 ', '语文', 10);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (13, 3, '张三丰 ', '数学', null);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (14, 3, '张三丰 ', '体育', 120);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (15, 4, '杨过 ', 'java', 90);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (16, 5, 'mike ', 'c++', 80);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (3, 3, '张三丰 ', 'oracle', 0);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (4, 4, '杨过 ', 'oracle', 77);
insert into t_score (autoid, s_id, s_name, sub_name, score)
values (17, 2, '李四 ', 'oracle', 77);
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具oracle rank函数怎么用_百度知道
oracle rank函数怎么用
提问者采纳
只是会存在序号还有其他用法,主要用法是rank()over(partiton by XX orader by ZZ desc)(分组排序序号)一般用来分组排序,与order by的排序结果相同,而且还有很多分析函数,里面的例子好多,这个可以上网找找,rank()over(partiton by XX orader by ZZ ) aa from table的结果为xx
2partition by可不写:xx
6那么select xx,它并不影响现有数据,与group by XX order by ZZ 不同的是,oracle分析函数。比如,这样就是全局排序,zzrank是oracle分析函数中的一个,希望对你有帮助
来自团队:
采纳率100%
其他类似问题
为您推荐:
左耳的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁找好工作,快人一步

我要回帖

更多关于 oracle rank over 的文章

 

随机推荐