Oracle 中分区和分组的区别

xiaoxiao2026-03-15  8

分区:

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

一:解析函数() 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) xFROM emp e ;

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

 

 

 

转载请注明原文地址: https://www.6miu.com/read-5045970.html

最新回复(0)