透视转换oracle,使用Oracle的行列转化函数实现ASH的数据透视功能
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的数据透视功能相关推荐
- java数据透视表插件_纯前端表格控件SpreadJS:新增数据透视表插件等,完美呈现强大的Excel数据分析能力...
SpreadJS是一款基于 HTML5 的纯前端电子表格控件,兼容 450 种以上的 Excel 公式,凭借其 "高性能.跨平台.与 Excel 高度兼容"的产品特性,备受以华为. ...
- ssis 数据转换_SSIS数据透视和SSIS数据透视转换概述
ssis 数据转换 This article explores an SSIS Pivot transformation and SSIS Unpivot transformation for cre ...
- oracle regr,oracle 分析函数
一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统 ...
- SQL Server 透视与逆透视转换解析
本篇文章聊聊T-SQL中对数据进行透视转换 (pivoting).逆透视转换 (unpivoting) 相关技术. 透视转换是把数据从行的状态旋转为列的状态,逆透视转换则是把数据从列的状态旋转为行的状 ...
- 【Excel 2013 数据透视表 学习】一、创建数据透视表
1 数据透视表 是Excel中数据处理分析工具. 用途: 1. 快速分类汇总.比较大量数据. 2. 快速变化统计分析维度查看统计结果. 数据透视表不仅综合了数据排序.筛选.组合及分类汇总等数据分析方法 ...
- wps透视表列总计移到顶部_数据透视表总计中的错误
wps透视表列总计移到顶部 Pivot tables are a quick and easy way to summarize a table full of data, without fancy ...
- 单单表单独占一行_数据透视表→Alt+D+P?
数据透视表是Excel中最快.最灵活.最强大的数据处理分析工具.它可以轻松快速地进行分类汇总.筛选与排序.数据比较分析等各种复杂的数据统计.在数据汇总和分析方面,它比各类求和.求平均.求占比Sumif ...
- el-table数据不显示_数据透视表,一篇就够了
| 函数部分告一段落,这一篇文章助你学懂数据透视表目录:一.创建数据透视表二.数据透视表字段列表 值的显示方式 三.分析 1.切片器 2.计算字段 3.计算项 4.组合四.设计 1.分类汇总 2.报表 ...
- SQL Server中数据透视表的Python脚本
This article talks about Python scripts for creating pivot tables in multiple ways. 本文讨论了以多种方式创建数据透视 ...
最新文章
- Android支付接入(五):机锋网
- Python 测试开发从入门到高手成长之路
- 由《惊天魔盗团》改编的VR游戏登陆Gear VR
- 关于nginx信号控制的“故障”案例
- Android O 新特性 — Notification
- 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
- I - Ant Trip (无向图欧拉回路+并查集),判断
- C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )
- [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
- java 使用gzip压缩和解压 传输文件必备
- 面向对象初调用:foolish 电梯
- airflow连接mysql错误_安装Airflow遇到的问题以及解决过程
- BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
- Java导出Excel 复杂表头
- 解决:网络风暴引起的无法ping通
- 附上一张公司项目解决方案的工程图
- 凯撒密码(凯撒移位)
- 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
- 菜鸟的JavaScript自学笔记整理
- [随笔所想] 2021年新年碎碎念-加油了不起的干饭人!
热门文章
- 马吕斯定律matlab拟合,Matlab插值模拟在光的偏振中的应用
- 惠普服务器查看主板型号,win10惠普主板型号查看图文教程
- 日志对服务器压力,服务器一大堆错误日志的解决方法
- edge如何导入html文件收藏夹,win10浏览器 edge浏览器收藏夹怎么导入?
- c语言数组与函数,C语言的数组与函数
- 技校考大专单招计算机考试,高职单招题简单吗 单招一般考什么科目
- java比对文本文件_Java编程实现比对两个文本文件并标记相同与不同之处的方法...
- 弧形面如何逆时针排序_环形导轨如何实现拐弯?
- git和python交互_使用Python连接和执行GIT命令
- sqlalchemy 增删改