在做统计是很多情况会用到分组排序 结合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如何实现分组排序和统计、聚集,如何分组求top N,什么是over分析函数,row_number(),rank(),dense_rank()区别又是什么, 如何找到一条记录的前后值,这份文档写得太好了。
上面语句表示,根据col1分组,在分组内部根据col2排序,这里的“别名”的值就是每组内部排序后的序列号(组内连续的、唯一的),“[partition by col1] ”可以省略。
oracle索引序列查询分组排序连接视图等PPT教案.pptx
实用基础SQL语句;oracle sqlldr;SQL基础语句;merge;分组排序;条件赋值;表连接。简单示例,Oracle数据库文档数据导入
sql 排序:row_number() over(partition by sjjl_id order by fksj desc,最优化的情况,里面放的有例子,大家可以参考
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQL里需要实现这样的功能,我们只能用一些灵活的办法
首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。 select id, (@rowno := @rowno + 1) as rank, score, (C.end_ti
含listagg函数 (行列转换) ,Oracle-SQL-Developer-使用简要说明,oracle导入导出语句,Oracle远程登录,rownum分组排序,wm_concat列转行
数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共...
数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共...
数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共...
数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共...
数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共...
oracle的编成规范、开发工具、分组、类型转换、排序函数、统计函数、层次查询、管道函数、递归查询、动态sql
emp表,dept表,联立的简单select,分组 排序等等的题目及答案
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
4.6 函数:字符串函数、数字函数和聚集函数(不是分组) 91 4.6.1 字符串函数 91 4.6.2 数字函数 92 4.6.3 聚集函数 92 4.7 日期函数(格式化的和按时间排列的) 93 4.7.1 日期函数 93 4.7.2 特殊格式的日期数据...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...