Oracle 中分区和分组的区别

分区:

如:需要对部门的员工收入 ,体育中的成绩进行排名的时候,要进行分部门,分栏目,分项目排名,这个时候要按分区计算,当然主要使用解析函数,----------------------->返回多行

一:解析函数() over(partition by 字段 order by 字段)
案例:

 

 

_        各种新闻(娱乐,体育,8挂,军事)的单击率在前3名记录

_        每种图片(计算机类,考试类,文学),销售量在前10名记录

_        每个班的前3名

 

 

二:分组: ---------------------->返回一行

求每个部门的max  sum  min  count  avg 时 可用group by

 

 

分区排名实例:

 

--1:脚本

 create table T_NEWS ( ID NUMBER, N_TYPE VARCHAR2(20), N_TITLE VARCHAR2(30), N_COUNT NUMBER ) ; insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (1, 'IT', '爱it1', 100); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (2, '体育', '爱体育1', 10); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (3, '体育', '爱体育2', 30); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (4, 'IT', '爱it2', 300); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (5, 'IT', '爱it3', 200); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (6, '体育', '爱体育3', 20); insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT) values (7, '体育', '爱体育4', 60); commit;

 

 

 

 

select * from t_news;


要求:根据显示各栏目(N_TYPE)点击率(N_COUNT)在前2名的记录

即要求显示:

 

 查询语句为:
select a.*
from (
  select t.*,
  rank() over (partition by t.n_type order by t.n_count desc) news_rank
  from t_news t
) a
where news_rank<=2


知识点:Oracle解析函数
说明:
·order by t.n_count desc:点击率排序
·rank:所排的名次
·partition:根据什么字段分区,不同区相互之间不互相影响。

说明:
partition(分区)与group by(分组)的区别是:前者仅仅是将数据按指定字段分开,分开后各区仍有多少记录;后者是根据指定字段进行分组,分组以后各组记录只能返回一条记录(即要进行聚合计算)。

类似的任务还有:统计各部门收入最高的前5条记录等。这类任务如果没有分区的技术,很难办到。所以再次体会到Oracle的强大之处。

 

不分区排名实例:

 操作emp表

 

SELECT  e.*,row_number() over(ORDER BY e.sal DESC) x
FROM emp e ;

SELECT * FROM (
  SELECT  t.*,row_number() over(ORDER BY t.sal DESC) r
  FROM emp t
  ORDER BY t.sal DESC
) t
WHERE r BETWEEN 1 AND 3

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值