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

所以有:对数据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函数的使用的更多相关文章

  1. Oracle DECODE函数的语法介绍

    Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解. Oracle DECODE函数 Oracle ...

  2. oracle decode函数用法

    DECODE函数是ORACLE PL/SQL是功能强大的函数之中的一个,眼下还仅仅有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一 ...

  3. Oracle DECODE函数的用法详解

    Oracle DECODE函数使用方法: 1.比较大小select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0. ...

  4. 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 ...

  5. 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 ...

  6. oracle decode函数和 sign函数

    流程控制函数 DECODE decode()函数简介: 主要作用: 将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1, ...

  7. [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行

    原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...

  8. SQL Server排名函数与排名开窗函数

    什么是排名函数?说实话我也不甚清楚,我知道 order by 是排序用的,那么什么又是排名函数呢? 接下来看几个示例就明白了. 首先建立一个表,随便插入一些数据. ROW_NUMBER 函数:直接排序 ...

  9. Oracle数据库从入门到精通 单行函数问题

    视频课程:李兴华 Oracle从入门到精通视频课程 学习者:阳光罗诺 视频来源:51CTO学院 Oracle数据库从入门到精通-单行函数 在数据库中,为了方便用户的数据开发,往往会提供一系列的支持函数 ...

  10. KingbaseES DENSE_RANK 函数用法

    DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级. 与 RANK() 函数不同的是,DENSE_RANK() 函数总 ...

随机推荐

  1. AHOI2019游记

    day0 早上八点钟出发,下午一点左右到了(高速好堵啊) 下午试机,打了一发线段树,堆和其他一些东西,测试完没有问题就走了 惊奇发现旁边竟然是合肥市队的WC银牌hzy,%%% 晚上%了一发金牌爷yg就 ...

  2. Oracle 12 Rman增量备份

    增量备份 增量备份主要作用是仅复制自上次备份以来已更改的数据块.您可以使用RMAN创建数据文件,表空间或整个数据库的增量备份. 将增量备份作为策略的一部分的主要原因是: 用于基于增量更新备份的策略,其 ...

  3. VueScroller 使用

    下载插件  npm install vue-scroller -D 引入插件: import Vue from 'vue'import VueScroller from 'vue-scroller' ...

  4. CEF C++调用前端js方法展示传递过来的图片数据

    转载:https://blog.csdn.net/lengyuezuixue/article/details/79769103 在项目开发过程中遇到一个需求,通过C++调用js方法传参给前端显示图片, ...

  5. FJNU Fang G and his Friends(状压DP)题解

    Description     众所周知,fang G 有很多小伙伴,有一天,Fang G 打算带他们去玩有趣的游戏OOXX,这个游戏需要分成两组,有趣的是,每个人互相之间都有一个满意度,大家都想和自 ...

  6. [转载]如何快速下载、安装和配置chromedriver ?

    转自:https://jingyan.baidu.com/album/f7ff0bfcdd89ed2e27bb1379.html?picindex=7 下载地址: http://npm.taobao. ...

  7. Vue小项目二手书商城:(三)前端渲染数据

    实现内容: axios取到的数据在前端使用(父子组件各自应该怎么使用) 一.简单使用(在哪取在哪用) 1.在App.vue中script中加上data(data专属于当前组件,父子组件传参通过prop ...

  8. vim编辑器-多行加注释与去注释

    在使用vim编辑器时,有时候需要对多行代码进行加注释或去注释,下面将介绍两种方法. 方法一:块选择模式 1. 插入注释 (1)首先按键盘上的ESC进入命令行模式 (2)再按Ctrl+V进入VISUAL ...

  9. ZooKeeper如何完成分布式锁?

    * 面试答案为LZ所写,如需转载请注明出处,谢谢. 1.最基本的思路: 将<local_ip>:<task_id>存在某个路径节点里. 刚开始并没有这个节点,当有executo ...

  10. haproxy keepalived和nodejsv9的容器镜像所需文件

    配合hub.docker.com 的dablyo/haproxy-keepalived-nodejsv9:190407 使用的 [root@haproxy ~]# cat haproxy.cfgglo ...