首页 > 数据库 >Oracle中pivot函数详解

Oracle中pivot函数详解

时间:2024-05-13 08:59:10浏览次数:22  
标签:name 样例 如下 详解 王五 Oracle pivot 学生 select

【基本介绍】
【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))

【说明】:实现将指定字段的字段值转换为列的效果。

【环境】:如下图是样例展示所使用的oracle版本。

 

 

【准备样例数据】
样例数据如下图所示:

NAME-学生姓名,SUBJECT-考试科目,GRADES-考试成绩。

 

 

【样例展示1】
实行如下sql语句:

select * from T_Student_Grades
pivot
(
sum(grades)
for name in('张三','李四','王五')
)

返回结果如下:按指定科目统计所有学生的总成绩,并将学生姓名字段行转列显示(此时虽然用到了聚合函数sum,由于SUBJECT字段也一并显示,因此sum函数并没有起到效果,显示依旧是每一个学生的各科具体成绩)。

 

 

【样例展示2】
实行如下sql语句:

select * from T_Student_Grades
pivot
(
avg(grades)
for name in ('张三' as 张三,'李四' as 李四,'王五' as 王五)
)

返回结果如下:按指定科目统计所有学生的平均成绩,并将学生姓名字段行转列,显示别名(此时虽然用到了聚合函数avg,由于SUBJECT字段也一并显示,因此avg函数并没有起到效果,显示依旧是每一个学生的各科具体成绩)。

 

 

【样例展示3】
实行如下sql语句:

select * from (select name,grades from T_Student_Grades)
pivot
(
sum(grades)
for name in ('张三','李四','王五')
)

返回结果如下:统计每一个学生的所有科目总成绩,并将学生姓名字段行转列(SUBJECT字段没有显示)。

 

 

【样例展示4】
实行如下sql语句:

select * from T_Student_Grades
pivot
(
max(grades)
for name in ('张三' as 张三,'李四' as 李四,'王五' as 王五)
)
where subject='数学'

返回结果如下:按指定科目统计所有学生的最高成绩,并将学生姓名字段行转列,并且只显示数学这一科目的成绩(此时虽然用到了聚合函数max,由于SUBJECT字段也一并显示,因此max函数并没有起到效果,依旧是显示每一个学生的各科具体成绩)。

 

 

【样例展示5】
实行如下sql语句:

select * from T_Student_Grades
pivot
(
min(grades)
for name in ('张三' as 张三,'李四' as 李四,'王五' as 王五)
)
where 张三='90'

返回结果如下:按指定科目统计所有学生的最低成绩,并将学生姓名字段行转列,并且只显示数学这一科目的成绩(此时虽然用到了聚合函数max,由于SUBJECT字段也一并显示,因此max函数并没有起到效果,依旧是显示每一个学生的各科具体成绩)。

 

 

【样例展示6】
实行如下sql语句(in中使用子查询):

select * from T_Student_Grades
pivot
(
count(grades)
for name in (select distinct name from T_Student_Grades)
)

报错提示:ORA-00936:确实表达式,如下图所示,看来in不支持子查询。

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_40018576/article/details/128287105

标签:name,样例,如下,详解,王五,Oracle,pivot,学生,select
From: https://www.cnblogs.com/TengQiuli/p/18188563

相关文章

  • Pyqt6&Pyside6 信号与槽详解
    信号与槽对于可视化编程,需要将界面上的控件有机结合起来,实现控件功能的联动和交互操作。比如点击按钮,实现某项功能。对按钮功能的定义,是通过信号(signal)与槽(slot)机制实现的。信号与槽是PySide6编程的基础,也是Qt的一大创新,有了信号与槽的编程机制,在PySide6中处理界面上各个控件......
  • ASH日志报告详解
    本文转自:https://blog.csdn.net/cuiyan1982/article/details/778145341.ASH日志报告详解1.1ASH报告使用ash报告,在生成ash报告之后,可以重新检索哪些标识为短暂性能问题的信息。ash报告的内容分成了以下几个部分:topeventsloadprofiletopsqltoppl/sqltopjavatopses......
  • Oracle 删除千万级数据量时,可以考虑以下方法来提高删除效率
    Oracle删除千万级数据量时,可以考虑以下方法来提高删除效率:分批删除:如果需要删除的数据量非常大,可以考虑分批进行删除。sqlDELETEFROMyour_tableWHEREyour_conditionANDrownum<=10000;COMMIT;使用直接路径删除:直接路径删除会绕过常规的SQL解析和绑定,可以减少删除操......
  • pivot 分组案例测试
    droptableStudentScores;CREATETABLEStudentScores(schoolvarchar(20),UserNameVARCHAR(20),--学生姓名SubjectVARCHAR(30),--科目ScoreFLOAT--成绩);INSERTINTOStudentScoresSELECT'人民大学......
  • Oracle之ASH、AWR、ADDM区别
    转自:https://www.cnblogs.com/remote-antiquity/p/7815747.html一、AWR(AutomaticWorkloadRepository)自动工作负载信息库  AWR是Oracle 10g中的一个新特性,类似于10g以前的statspack.不过在使用上要比statspack简单,提供的性能指标要比statspack多很多,能更好的帮助DBA来发......
  • HTTP 连接详解
    概述世界上几乎所有的HTTP通信都是由TCP/IP承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序TCP(TransmissionControlProtocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层......
  • 平均汇总(Power Pivot)
    问题:如何在数据透视表中显示类似列总计的平均汇总?解决:在数据模型中添加列Dax公式:=SUMX('区域','区域'[数量]*('区域'[物料编码]=earlier('区域'[物料编码])))/distinctcount('区域'[日期(月)])数据透视表布局:行字段:物料编码、平均列字段:组后为月的日期值字段:数量其......
  • [转帖]Oracle23ai来了,23爱,23❤️,都安装好了...
    https://juejin.cn/post/7364059278242332710 专栏: Oracle日常运维宝典系列  makefile复制代码作者:IT邦德中国DBA联盟(ACDU)成员,10余年DBA工作经验擅长主流数据Oracle、MySQL、PG、openGauss运维备份恢复,安装迁移,性能优化、故障应急处理等可提供......
  • 详解Redis持久化(持久化高危漏洞利用与多种对抗方案、RDB、AOF、同步手动持久化、异步
    谨防持久化+未授权访问漏洞入侵服务器CVE编号找不到,CNVD有一个:CNVD-2015-07557(国家信息安全漏洞共享平台漏洞编号)。这是我之前写过的文章,漏洞成因、影响范围、POC与对抗方案有详解:谨防利用Redis未授权访问漏洞入侵服务器RDB(RedisDatabase、全量保存,默认方式)极简概括:通过符......
  • Agile PLM数据库表结构(Oracle)
    刚进公司,任务是接管PLM系统,但是还在给外包团队开发,没有代码。无妨先看业务和数据库,ok,业务看不懂,只能先看数据库,数据库没有数据字典,这个系统没有任何文档产出......练手时发现数据库类型是Oracle,面对百度不成问题,数据字典只能看前端然后去数据库里面一个个找着对应自己整理了,纯折磨......