摘要
Summary
日常数据处理中,无论是报表制作还是数据分析,往往会涉及到数据集的行列转换,通过对数据有指向的聚合,以提供理想的数据透视。作为一款企业级的数据库产品,南大通用GBase 8s数据库提供Pivot及其逆操作Unpivot函数,在上一期的内容中,我们详尽分析了Pivot函数的使用(点击查看Pivot函数使用),本篇文章,让我们一起来了解Unpivot函数。
Unpivot函数概述
Unpivot是Pivot操作的逆过程,是一种将表中的列转换为行的操作。Unpivot特别适用于处理具有多个相关值(通常表示不同类别或时间点的数据)存储在多列中的情况,这种转换使得原本在列中的多个值分布在多行中,从而可以对这些值进行纵向分析,便于进行分析、查询或与其他数据集进行整合。
Unpivot语法详解
在GBase 8s中,Unpivot操作的语法同样简单明了。通过指定目标字段和源字段,我们可以将数据从列格式转换为行格式,从而实现数据的深入分析。
Unpivot使用示例
首先,创建一个 pivot 操作后的结果集用于unpiovt的举例。
用例:
Unpivot转换查询注意事项
-
Unpivot 查询可以作用于任何列,而不仅是聚合后的列或pivot操作后的列,GBase 8s支持对任何表、任何视图的列进行unpivot操作;
-
一个unpivot查询可以返回的最大行数为:分组数 * unpivot_in_clause 中指定的转换操作列(上述列子中为4(job) * 3(转换列)=12,默认exclude nulls,不含空行,去掉4个空行,则结果为8);
-
GBase 8s限制了unpivot_in_clause 中指定的转换列数目最多256 列;
-
GBase 8s要求unpivot_in_clause 中的列必须是相同的数据类型;
-
GBase 8s要求unpivot_for子句的项个数与unpivot_in子句中的AS项表达式数目保持一致;
-
在pivot 中,pivot_in_clause 和pivot_clause中可以指定别名。unpivot 语法中也允许使用别名,但是只能给 unpivot_in_clause 中定义的列指定别名。且GBase 8s只能是常量表达式,unpivot_in_clause 中的别名,GBase 8s不能支持加单引号。
写在最后
其他Unpivot使用上的限制,可参考官方文档《GBase 8s V8.8 SQL 指南:语法.pdf》
官方文档链接:https://www.gbase.cn/download/gbase-8s-1?category=DOCUMENT
也欢迎大家到南大通用GBase技术社区:https://www.gbase.cn/community,交流与分享更多GBase数据库技术疑问和使用体验。