设为首页 收藏本站
查看: 655|回复: 0

[经验分享] Oracle 中分区和分组的区别

[复制链接]

尚未签到

发表于 2016-7-27 06:28:11 | 显示全部楼层 |阅读模式
  分区:
  如:需要对部门的员工收入 ,体育中的成绩进行排名的时候,要进行分部门,分栏目,分项目排名,这个时候要按分区计算,当然主要使用解析函数,----------------------->返回多行
  一:解析函数() 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
  
  
  
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249843-1-1.html 上篇帖子: 在oracle中绑定变量的使用 下篇帖子: Oracle数据库数据对象分析(中)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表