`
liuxiang123
  • 浏览: 30477 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

oracle分组排序

 
阅读更多

在做统计是很多情况会用到分组排序 结合http://blog.csdn.net/shilang999/article/details/6398104谈论的方法

 

自己建了一个demo验证 留在这里以便备份

CREATE TABLE student2(
student_id NUMBER PRIMARY KEY,
student_name VARCHAR2(30) NOT NULL)

CREATE TABLE score(
score_id NUMBER PRIMARY KEY,
student_id NUMBER,
course_id NUMBER,
score NUMBER)

CREATE TABLE course(
course_id NUMBER PRIMARY KEY,
course_name VARCHAR2(30)) ;

insert into course values (1,'课程1');
insert into course values (2,'课程2');
insert into course values (3,'课程3');
insert into course values (4,'课程4');

insert into score values (1,1,1,90);
insert into score values (2,1,2,89);
insert into score values (3,1,3,88);
insert into score values (4,1,4,85);
insert into score values (5,2,1,86);
insert into score values (6,2,2,80);
insert into score values (7,2,3,56);
insert into score values (8,2,4,98);
insert into score values (9,3,1,67);
insert into score values (10,3,4,34);
insert into score values (11,3,2,67);
insert into score values (12,3,3,90);

insert into score values (13,4,1,91);
insert into score values (14,4,2,92);
insert into score values (15,4,3,93);
insert into score values (16,4,4,94);
insert into score values (17,5,1,98);
insert into score values (18,5,2,99);
insert into score values (45,5,3,98);
insert into score values (46,5,4,99);


insert into score values (19,6,1,88);
insert into score values (20,6,2,89);
insert into score values (21,6,3,88);
insert into score values (22,6,4,89);

insert into score values (23,7,1,78);
insert into score values (24,7,2,79);
insert into score values (25,7,3,78);
insert into score values (26,7,4,79);

insert into score values (27,8,1,71);
insert into score values (28,8,2,72);
insert into score values (29,8,3,73);
insert into score values (30,8,4,74);

 

insert into score values (31,9,1,61);
insert into score values (32,9,2,62);
insert into score values (33,9,3,63);
insert into score values (34,9,4,64);

insert into score values (35,10,1,55);
insert into score values (36,10,2,65);
insert into score values (37,10,3,53);
insert into score values (38,10,4,54);

insert into student2 values (1,'张1');
insert into student2 values (2,'张2');
insert into student2 values (3,'张3');
insert into student2 values (4,'张4');
insert into student2 values (5,'张5');
insert into student2 values (6,'张6');
insert into student2 values (7,'张7');
insert into student2 values (8,'张8');
insert into student2 values (9,'张9');
insert into student2 values (10,'张10');

 

 

用rank() dense_rank()具有并列名次之分

select *
  from (select a.score,
               b.student_name,
               c.course_name,
               rank() over(partition by a.course_id order by a.score desc) rk
          from score a, student2 b, course c
          where a.student_id = b.student_id
           and a.course_id = c.course_id) ss
 where ss.rk <= 4

 

而采用row_number()是直接去行数  不管是否具有相同数据

select *
  from (select a.score,
               b.student_name,
               c.course_name,
               row_number() over(partition by a.course_id order by a.score desc) rk
          from score a, student2 b, course c
          where a.student_id = b.student_id
           and a.course_id = c.course_id) ss
 where ss.rk <= 4

分享到:
评论

相关推荐

    oracle分组排序统计高级用法

    #### 一、Oracle分组排序和统计概述 在Oracle数据库中,实现分组排序和统计是一项常见的需求,主要用于处理大量的数据,并从中提取有价值的信息。通过合理运用SQL语句,特别是`GROUP BY`、`ORDER BY`以及分析函数等...

    oracle 根据部门求和排序

    上面语句表示,根据col1分组,在分组内部根据col2排序,这里的“别名”的值就是每组内部排序后的序列号(组内连续的、唯一的),“[partition by col1] ”可以省略。

    oracle处理的类型 oracle行排序

    例如,使用分析函数(如RANK(), DENSE_RANK(), ROW_NUMBER()等)可以实现分组排序,这对处理大数据量的报表或排名场景非常有用。另外,了解并合理运用Oracle的并行查询(Parallel Query)功能,可以在多处理器系统上...

    oracle索引序列查询分组排序连接视图等PPT教案.pptx

    oracle索引序列查询分组排序连接视图等PPT教案.pptx

    利用ORACLE实现数据的抽样

    在Oracle中,可以先通过`GROUP BY`对数据进行分组,再从每个分组中随机选取记录,以此来模拟整群抽样的效果。 #### 4. 分层抽样 分层抽样是将总体按照某些特征划分成不同的层,然后从每一层中随机抽取样本。在...

    Oracle中分组后拼接分组字符串[文].pdf

    Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接分组字符串是一种常见的操作,用于将分组后的多条记录的某字段进行拼接。下面我们来详细介绍如何实现这种操作。 首先,创建一个测试表 `test`,该表包含三...

    MySQL分组排序功能

    例如,在进行复杂的分组排序时,MySQL并没有提供类似于Oracle中的`OVER()`窗口函数,这使得实现某些复杂的数据分析变得较为棘手。本文将详细介绍如何在MySQL中实现类似Oracle中`row_number() over (partition by)`的...

    oracle sqlldr;;merge;分组排序;条件赋值;表连接。简单示例

    实用基础SQL语句;oracle sqlldr;SQL基础语句;merge;分组排序;条件赋值;表连接。简单示例,Oracle数据库文档数据导入

    分组排序选择需要一条

    sql 排序:row_number() over(partition by sjjl_id order by fksj desc,最优化的情况,里面放的有例子,大家可以参考

    如何在水晶报表中分组排序记录源程序实例,C#.net源代码编写,

    在Crystal Reports中,分组和排序是数据呈现的关键步骤,特别是在C#.NET环境中,通过Visual Studio.NET进行开发时。这篇文章将深入探讨如何使用C#.NET编写源代码来实现这一功能。 首先,理解水晶报表(Crystal ...

    Oracle数据库分组查询练习题(包答案)

    根据提供的信息,我们可以详细解析与Oracle数据库分组查询相关的知识点,并通过具体的练习题目来加深理解。下面将逐一分析每一个题目中的关键知识点。 ### Oracle数据库分组查询知识点详解 #### 1. 查询部门20的...

    Oracle实现对查询结果每N条再次分组博客所用数据库

    标题中的“Oracle实现对查询结果每N条再次分组”是指在Oracle数据库中进行数据处理时,使用SQL语句对查询结果进行分组,而这里的“每N条再次分组”通常指的是使用GROUP BY子句配合ROW_NUMBER()、PARTITION BY等函数...

    Oracle多行记录合并

    它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`的表,其中包含`customer_id`和`order_item`字段,可以使用以下查询来合并每个客户的所有订单项: ```sql SELECT ...

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    数据库面试题5 oracle笔试 oracle例题

    适当的索引可以加速分组和排序过程。 8. **索引选择性**: - 索引的选择性越高(即索引中的不同值越多),索引的效果越好。低选择性的索引(如性别列,只有两个可能值)可能不如高选择性索引(如身份证号)有效。 ...

    Mysql利用group by分组排序

    首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。 select id, (@rowno := @rowno + 1) as rank, score, (C.end_ti

    oracle材料

    本文将深入探讨在"Oracle材料"中提到的一些关键知识点,包括`listagg`函数、Oracle SQL Developer的使用、数据导入导出、远程登录、`rownum`与分组排序以及`wm_concat`函数。 1. **Listagg函数**:`listagg`是...

Global site tag (gtag.js) - Google Analytics