ORACLE,DECODE函数和排名函数DENSE_RANK函数的使用
这几天写一个报表的页面,从很恶心的数据结构中做一个聚合函数的查询,结构大概是这个样子的:

所以有:对数据group by t.id,t.name.t.course
这样三层排序,然后用函数去取值。
- decode(feildname,'Match_value','value1','value2') -- 用字段名称去跟Match_value做对比,对比成功,返回value1 否则返回 value1

这里把decode()放在group by 的select内部,同聚合函数一起使用,计算对应值。

很明显,这里得到的数据结构并不是我想要的样子,但是以目前水平暂时只能做到这里了。后边的放在js里处理的。
- 排名函数:dense_rank
这个用法其实也没太搞明白,应该是将数据集根据条件排序,但是存在排序的排名方式,这个dense_rank还有rank()和row_number()三个函数不同之处见:http://blog.csdn.net/winer2008/article/details/4283539
下边贴上测试用的所有代码:
- 表的创建修改,插入数据。
create table KECHENG
(
id NUMBER,
name VARCHAR2(20),
course VARCHAR2(20),
score NUMBER,
examtime DATE,
test1 VARCHAR2(50)
)
tablespace THRONESPACE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
); insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '语文', 657, to_date('12-07-2017 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '张三', '数学', 476, to_date('11-07-2017 00:07:00', 'dd-mm-yyyy hh24:mi:ss'), '22ddd');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '张三', '历史', 564, to_date('26-07-2017 04:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '语文', 534, to_date('26-07-2017 19:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '数学', 81, to_date('26-07-2017 17:57:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '历史', 933, to_date('20-07-2017 03:57:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '语文', 264, to_date('23-07-2017 05:03:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '数学', 25, to_date('10-07-2017 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '历史', 45, to_date('03-07-2017 11:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '张三', '语文', 667, to_date('12-07-2017 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '数学', 766, to_date('11-07-2017 00:09:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '张三', '历史', 546, to_date('26-07-2017 04:03:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '语文', 54, to_date('26-07-2017 19:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '李四', '数学', 821, to_date('26-07-2017 17:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '历史', 93, to_date('20-07-2017 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '语文', 254, to_date('23-07-2017 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '数学', 245, to_date('10-07-2017 03:58:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '历史', 454, to_date('03-07-2017 10:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '语文', 677, to_date('12-07-2017 05:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '数学', 776, to_date('11-07-2017 00:07:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '历史', 56, to_date('26-07-2017 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '语文', 564, to_date('26-07-2017 21:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '李四', '数学', 481, to_date('26-07-2017 17:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '李四', '历史', 923, to_date('20-07-2017 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '语文', 24, to_date('23-07-2017 05:08:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '数学', 265, to_date('10-07-2017 03:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '历史', 465, to_date('03-07-2017 10:05:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '语文', 767, to_date('12-07-2017 07:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '数学', 276, to_date('11-07-2017 01:07:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '张三', '历史', 566, to_date('26-07-2017 04:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '语文', 454, to_date('26-07-2017 19:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '数学', 81, to_date('26-07-2017 17:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '李四', '历史', 953, to_date('20-07-2017 03:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (1, '王五', '语文', 244, to_date('23-07-2017 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (2, '王五', '数学', 425, to_date('10-07-2017 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), '');
insert into KECHENG (id, name, course, score, examtime, test1)
values (3, '王五', '历史', 45, to_date('03-07-2017 10:02:00', 'dd-mm-yyyy hh24:mi:ss'), '');
commit;
- 查询用的sql
select t.id,
t.name,
t.course,
max(decode(t.course, '语文', score, 0)) yuwenmax,
min(decode(t.course, '语文', score, 0)),
round(avg(decode(t.course, '语文', score, 0)), 4),
max(decode(t.course, '历史', score, 0)),
min(decode(t.course, '历史', score, 0)),
round(avg(decode(t.course, '历史', score, 0)), 4),
max(decode(t.course, '数学', score, 0)),
min(decode(t.course, '数学', score, 0)),
round(avg(decode(t.course, '数学', score, 0)), 4),
decode(t.course,
'数学' ,min(t.score) KEEP(dense_rank first ORDER BY t.examtime),
0) as start_value, --这里取起始值,结束值和增量
decode(t.course,
'数学' ,min(t.score) KEEP(dense_rank last ORDER BY t.examtime),
0) as end_value,
decode(t.course,
'数学' ,min(t.score) KEEP(dense_rank last ORDER BY t.examtime),
0) -
decode(t.course,
'数学' ,min(t.score) KEEP(dense_rank first ORDER BY t.examtime),
0) as minus_value
from kecheng t
group by t.id, t.name, t.course
order by t.id,
t.name
ORACLE,DECODE函数和排名函数DENSE_RANK函数的使用的更多相关文章
- Oracle DECODE函数的语法介绍
Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解. Oracle DECODE函数 Oracle ...
- oracle decode函数用法
DECODE函数是ORACLE PL/SQL是功能强大的函数之中的一个,眼下还仅仅有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一 ...
- Oracle DECODE函数的用法详解
Oracle DECODE函数使用方法: 1.比较大小select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0. ...
- oracle decode函数 和 case when
1.oracle decode分支函数 select decode(to_char(B.LQSJ, 'hh24:mi:ss'), '00:00:00', to_char(B.LQSJ, 'yyyy-m ...
- SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()
1 SELECT orderid,custid,val, ROW_NUMBER() OVER(ORDER BY val) AS rownum, RANK() OVER(ORDER BY val) AS ...
- oracle decode函数和 sign函数
流程控制函数 DECODE decode()函数简介: 主要作用: 将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1, ...
- [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...
- SQL Server排名函数与排名开窗函数
什么是排名函数?说实话我也不甚清楚,我知道 order by 是排序用的,那么什么又是排名函数呢? 接下来看几个示例就明白了. 首先建立一个表,随便插入一些数据. ROW_NUMBER 函数:直接排序 ...
- Oracle数据库从入门到精通 单行函数问题
视频课程:李兴华 Oracle从入门到精通视频课程 学习者:阳光罗诺 视频来源:51CTO学院 Oracle数据库从入门到精通-单行函数 在数据库中,为了方便用户的数据开发,往往会提供一系列的支持函数 ...
- KingbaseES DENSE_RANK 函数用法
DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级. 与 RANK() 函数不同的是,DENSE_RANK() 函数总 ...
随机推荐
- Axure无法签出,团队配合时无法导入项目
SVN管理项目,团队多人合作维护 在Axure签出时,报错. 提示:无法创建目录 ... 设备上没有空间 SVN也检出失败 当然,还有其他情况 如:未将对象引用设置到对象的实例.等等 个别提示如下图: ...
- shell之for和if实现批量替换多目录下的文件
问题背景: 生产环境的项目图片文件夹众多,每个项目都会有一个图片文件夹,现在要批量替换每个文件夹下的一张模板图片 如图,我们要替换每一个文件夹下的01.jpg shell 脚本 #/bin/bash ...
- C#调用VlcControl做一个播放器
开发环境: Visual Studio 2015 .Net Framework 4.5 1.新建一个Windows窗体应用程序 修改框架为.Net Framework 4.5 2.管理NuGet包 下 ...
- 软件测试3gkd
一.单元测试的任务 单元测试主要是对软件的基本组成单元进行测试,且所测试单元与程序的其他部分在测试中相隔离. 在单元测试中,我们需要对与程序构建中的单位测试以保证其可靠运行与代码规范. 单元测 ...
- javascript的对象内容对比
vue是这样对比的 function looseEqual (a, b) { if (a === b) return true const isObjectA = isObject(a) const ...
- bootstrap table 分页序号递增问题 (转)
原文地址:https://segmentfault.com/q/1010000011040346 如题,怎么在bootstrap table中显示序号,序号递增,并且分页有效,等于是每页10条,第2页 ...
- 创建您的 ActiveReports Web端在线报表设计器
概述 ActiveReports Web端在线报表设计器已经正式上线!看到它这么帅气.实用,你是不是也想自己动手创建一个? 现在我们就来教您,如何创建一个简单的 ActiveReports Web端在 ...
- leetcode算法题01
最近求职需要重新刷算法题,从今天开始每天至少做一个leatcode的题 如果有更好的算法或者换了语言也会更新 题目: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只 ...
- js及jsp区别
- GT sport赛道详解 - Dragon Trail | 龙之径
参考:GT sport所有赛道简介 今天的心情变化挺大,从绝望放弃到豁然开朗. 前言:GT sport有个排位赛,是每位sim赛车手提升自己等级的唯一途径,其中一个排位赛就是龙之径II(逆时针跑),我 ...