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() 函数总 ...
随机推荐
- node全局安装说明(create-react-app、)
1.使用 create-react-app 快速构建 React 开发环境 国内使用 npm 速度很慢,你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm: $ np ...
- 【Django试图与网址003】
Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 一,首先,新建一个项目(project), 名称为 ...
- String,StringBuilder,tringBuffer
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > Str ...
- WARN PageNotFound:208 - Request method 'POST' not supported
在地址栏输入网址访问页面 ,用的是GET方法. 在用ajax接收后台数据,根据返回值进行提示或页面跳转时报:WARN PageNotFound:208 - Request method 'POST' ...
- Pycharm,Python 安装OpenCV and CV2 时,报错,教你如何正确安装。
Collecting cv2 Could not find a version that satisfies the requirement cv2 (from versions: ) No matc ...
- criteo marketing api 相关
官网登陆地址:https://marketing.criteo.com/ 官网api介绍:https://marketing.criteo.com/e/s/article?article=360001 ...
- Ubuntu 14.04 安装 sysrepo v0.7.5
参考: Tentative gNMI support with sysrepo protobuf-c/protobuf-c Ubuntu 14.04 安装 sysrepo v0.7.5 安装依赖: s ...
- Python自动发送邮件提示:smtplib.SMTPServerDisconnected: please run connect() first
参考:http://blog.csdn.net/leven_change/article/details/66976695
- 从vue源码看props
前言 平时写vue的时候知道props有很多种用法,今天我们来看看vue内部是怎么处理props中那么多的用法的. vue提供的props的用法 1. 数组形式 props: ['name', 'va ...
- Table的两种处理方法记录
简单记录一下,方便以后参考:基于JQuery实现 一种是滚轮,一种是翻页 滚轮的代码实现: <div class="col-md-12" style="width: ...