11g里面有个很有用的新特性,对数据透视图的支持。

简单而言,它可以实现宽表和窄表之间的转化。举一个例子,有一张表记录了全校所有班级所有学生的成绩(A,B,C,D,E),现在想统计每个班级里每个分数级别对应的学生人数。当然,一个SQL就可以实现:

SELECT class, score, count(*) FROM score_table

GROUP BY class, score;

结果的格式如下:

班级 分数 人数

一年一班 A 10

一年一班 B 16

一年一班 C 16

一年一班 D 16

一年一班 E 16

一年二班 A 15

一年二班 B 14

一年二班 C 15

一年二班 D 14

一年二班 E 15

不过,很多人更想要下面的格式

班级 A B C D E

一年一班 10 16 16 16 16

一年二班 15 14 15 14 15

第二种格式显然简单明了多了。

用Oracle的新语法,可以实现如下

SELECT *

FROM

(

SELECT class,score,count(*) cnt

FROM score_table

GROUP BY class,score

)

pivot

(

sum(cnt) FOR score IN ('A','B','C','D','E')

)

;

一个更实用的场合是对ASH(active session history)数据的处理上。

一般而言,我们需要一段时间内Top 10的wait event,并掌握其在每个时间片(例如10 seconds)里的分布。这些信息可以通过下面的SQL进行获取:

SELECT

to_char(to_date(trunc(to_char(sample_time,'SSSSS')/10)*10,'SSSSS'),'hh24:mi:ss') start_time

, decode(ash.session_state,'ON CPU','ON CPU',ash.event) event

, count(1)/10 total

FROM

v$active_session_history ash

WHERE

sample_time > sysdate-1/24

GROUP BY trunc(to_char(sample_time,'SSSSS')/10)

, decode(ash.session_state,'ON CPU','ON CPU',ash.event)

;

同样的,我们更习惯将这个结果进行倒置。这同样可以通过pivot来实现:

SELECT * FROM

(SELECT

to_char(to_date(trunc(to_char(sample_time,'SSSSS')/10)*10,'SSSSS'),'hh24:mi:ss') start_time

, decode(ash.session_state,'ON CPU','ON CPU',ash.event) event

, count(1)/10 total

FROM

v$active_session_history ash

WHERE

sample_time > sysdate-1/24

GROUP BY trunc(to_char(sample_time,'SSSSS')/10)

, decode(ash.session_state,'ON CPU','ON CPU',ash.event)

) ash

pivot (sum(total) FOR event IN ('ON CPU' AS TOP1,'PX Deq: Slave Session Stats' AS TOP2))

ORDER BY 1;

下面是一个ASH的例子,系统的工作状态已经一目了然了!

TOP EVENT

----- ----------------------------------------------------------------

TOP1 cell smart table scan

TOP2 ASM file metadata operation

TOP3 control file sequential read

TOP4 ON CPU

TOP5 enq: XL - fault extent map

TOP6 DFS lock handle

TOP7 cell single block physical read

TOP8 reliable message

TOP9 read by other session

TOP10 latch: shared pool

TIME TOP1 TOP2 TOP3 TOP4 TOP5 TOP6 TOP7 TOP8 TOP9 TOP10

-------- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

00:30:50 1

00:31:30

00:31:40

00:31:50

00:32:10

00:32:30

00:32:50 1

00:34:10

00:34:30 1

00:34:40

00:35:10 1

00:35:40 1

00:37:50 16 34 5 9 2 1 14 3 9

00:38:00 296 95 7 9 3 6 1 6

00:38:10 478 133 15 4 17 7 1

00:38:20 543 71 21 6 8 7 5

00:38:30 531 81 13 2 14 9 1 2

00:38:40 600 30 17 4 2 1 2

00:38:50 592 36 16 4 5 10 1

00:39:00 609 20 12 6 10 4

00:39:10 620 14 13 4 2 10

00:39:20 628 5 10 4 10 1

00:39:30 248 7 4 4 4

透视转换oracle,使用Oracle的行列转化函数实现ASH的数据透视功能相关推荐

  1. java数据透视表插件_纯前端表格控件SpreadJS:新增数据透视表插件等,完美呈现强大的Excel数据分析能力...

    SpreadJS是一款基于 HTML5 的纯前端电子表格控件,兼容 450 种以上的 Excel 公式,凭借其 "高性能.跨平台.与 Excel 高度兼容"的产品特性,备受以华为. ...

  2. ssis 数据转换_SSIS数据透视和SSIS数据透视转换概述

    ssis 数据转换 This article explores an SSIS Pivot transformation and SSIS Unpivot transformation for cre ...

  3. oracle regr,oracle 分析函数

    一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统 ...

  4. SQL Server 透视与逆透视转换解析

    本篇文章聊聊T-SQL中对数据进行透视转换 (pivoting).逆透视转换 (unpivoting) 相关技术. 透视转换是把数据从行的状态旋转为列的状态,逆透视转换则是把数据从列的状态旋转为行的状 ...

  5. 【Excel 2013 数据透视表 学习】一、创建数据透视表

    1 数据透视表 是Excel中数据处理分析工具. 用途: 1. 快速分类汇总.比较大量数据. 2. 快速变化统计分析维度查看统计结果. 数据透视表不仅综合了数据排序.筛选.组合及分类汇总等数据分析方法 ...

  6. wps透视表列总计移到顶部_数据透视表总计中的错误

    wps透视表列总计移到顶部 Pivot tables are a quick and easy way to summarize a table full of data, without fancy ...

  7. 单单表单独占一行_数据透视表→Alt+D+P?

    数据透视表是Excel中最快.最灵活.最强大的数据处理分析工具.它可以轻松快速地进行分类汇总.筛选与排序.数据比较分析等各种复杂的数据统计.在数据汇总和分析方面,它比各类求和.求平均.求占比Sumif ...

  8. el-table数据不显示_数据透视表,一篇就够了

    | 函数部分告一段落,这一篇文章助你学懂数据透视表目录:一.创建数据透视表二.数据透视表字段列表 值的显示方式 三.分析 1.切片器 2.计算字段 3.计算项 4.组合四.设计 1.分类汇总 2.报表 ...

  9. SQL Server中数据透视表的Python脚本

    This article talks about Python scripts for creating pivot tables in multiple ways. 本文讨论了以多种方式创建数据透视 ...

最新文章

  1. Android支付接入(五):机锋网
  2. Python 测试开发从入门到高手成长之路
  3. 由《惊天魔盗团》改编的VR游戏登陆Gear VR
  4. 关于nginx信号控制的“故障”案例
  5. Android O 新特性 — Notification
  6. 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
  7. I - Ant Trip (无向图欧拉回路+并查集),判断
  8. C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )
  9. [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
  10. java 使用gzip压缩和解压 传输文件必备
  11. 面向对象初调用:foolish 电梯
  12. airflow连接mysql错误_安装Airflow遇到的问题以及解决过程
  13. BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
  14. Java导出Excel 复杂表头
  15. 解决:网络风暴引起的无法ping通
  16. 附上一张公司项目解决方案的工程图
  17. 凯撒密码(凯撒移位)
  18. 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
  19. 菜鸟的JavaScript自学笔记整理
  20. [随笔所想] 2021年新年碎碎念-加油了不起的干饭人!

热门文章

  1. 马吕斯定律matlab拟合,Matlab插值模拟在光的偏振中的应用
  2. 惠普服务器查看主板型号,win10惠普主板型号查看图文教程
  3. 日志对服务器压力,服务器一大堆错误日志的解决方法
  4. edge如何导入html文件收藏夹,win10浏览器 edge浏览器收藏夹怎么导入?
  5. c语言数组与函数,C语言的数组与函数
  6. 技校考大专单招计算机考试,高职单招题简单吗 单招一般考什么科目
  7. java比对文本文件_Java编程实现比对两个文本文件并标记相同与不同之处的方法...
  8. 弧形面如何逆时针排序_环形导轨如何实现拐弯?
  9. git和python交互_使用Python连接和执行GIT命令
  10. sqlalchemy 增删改