首页 > 数据库 >GBASE南大通用GBase 8s数据库Pivot函数

GBASE南大通用GBase 8s数据库Pivot函数

时间:2024-09-25 11:21:45浏览次数:11  
标签:转换 clause 8s pivot Pivot deptno GBase

摘要

Summary

作为一款企业级的数据库产品,南大通用GBase 8s数据库具备杰出的数据处理能力。日常数据处理中,无论是报表制作还是数据分析,我们经常会遇到将行数据转换为列数据的需求。Pivot函数的存在完美解决这一问题,轻松实现行数据到列数据的转换,帮助我们从不同的角度审视数据。本文将详细介绍如何使用Pivot函数进行动态行转列操作,并提供具体的操作示例。


GBase 8s Pivot函数的概述

Pivot,即行转列,是一种将表中的行数据转换为列数据的过程。通过Pivot操作,我们可以将数据表中的一列或多列的数据转化为多列的形式,以便更好地进行横向统计和分析。


Unpivot,即列转行,与Pivot相反,Unpivot则是将表中的列数据转换为行数据。以便更好地进行纵向统计和分析。


Pivot和Unpivot是数据转换中非常有用的两个函数,它们可以根据需要改变数据的呈现方式,使得数据更易于理解和分析。在数据库查询、数据分析、报表制作等领域中,都有着广泛的应用。我们将在下一篇文章介绍Unpivot函数。


GBase 8s pivot的语法详解


Pivot 转换数据的过程:多行被聚合,然后转换成列,每一列表示聚合数据的不同范围。语法如下:

GBASE南大通用GBase 8s数据库Pivot函数_数据

pivot紧跟from,位于from和where之间。


【一句话来说明】:pivot(聚合函数1 as 别名1,聚合函数2 as 别名2 ...) for 需要转为列的字段1,字段2.... in((字段1值1,字段2值1) as 别名1,(字段1值2,字段2值2) as 别名2...)


GBase 8s Pivot示例


注意:以下所用示例使用的数据库版为:GBase8sV8.8_TL_3.5.1_x86_64


下面示例都是对pivot语法的简单演示,使用emp表,在转换前,先看一下基础数据:

GBASE南大通用GBase 8s数据库Pivot函数_GBASE_02

--用例1:单列转换


这里将通过deptno和job来汇总sal1,然后转换对deptno的汇总到它们各自的列上


需要聚合的列:sal1


需要转换的列:deptno


转换的列需要过滤的值:10,20,30,40

GBASE南大通用GBase 8s数据库Pivot函数_数据_03

关于这个例子需要注意的地方:


pivot操作实际执行了隐式的GROUP BY,使用的列是没有出现在pivot_clause中的列(本例为job和deptno),大多数的转换查询都是在列的特定的子集上来执行。像所有的聚合查询一样,额外列的出现会影响分组。在本例中,除了sal 1列,其余所有列都成了分组集,其中deptno为转换列。基础数据中的其他列如ename等如果加入就会影响分组,所以可以使用子查询等来定义基列的集合,例子中的SELECT deptno, job, sal 1 FROM emp作用就是定义基列的集合。


--用例2:所有列都参与的效果:

GBASE南大通用GBase 8s数据库Pivot函数_数据_04

本例中,除了sal 1列,其余所有列都成了分组集,其中deptno为转换列。这个转换没有什么意义。


--用例3:with as


下面再举一个with as子查询的例子,效果与上述内联视图结果一致。

GBASE南大通用GBase 8s数据库Pivot函数_GBase数据库_05

--用例4:多列转换

GBASE南大通用GBase 8s数据库Pivot函数_GBASE_06

上面的例子中 pivot_clause 中定义 2 个聚合,这里得到的转换列是双倍(因为聚合的数量是双倍)。


转换列的数量=聚合列的数量 * pivot_in_clause 中值的个数(2*2=4),

转换列的数量不能超过 1024。


--用例5,多列多值转换

GBASE南大通用GBase 8s数据库Pivot函数_GBase数据库_07


GBase 8s Pivot转换查询注意事项


在 pivot_for_clause 中使用的列(如例子中为 deptno 列)不能出现在SELECT投影列中,在 pivot_for_clause 中的列会根据我们在 pivot_in_clause中提供的值的范围进行分组。下列中试图查询 deptno 列,会引发异常,因为这种情况下,deptno完全从投影中被移除了。

GBASE南大通用GBase 8s数据库Pivot函数_GBase数据库_08

同样也不能查询任何出现在pivot_clause 中的列。比如试图查询 sal1 列,也会引发了同样的异常。


pivot_clause中的列必须使用聚合函数,没有使用聚合函数,也会引发异常。

GBASE南大通用GBase 8s数据库Pivot函数_GBase数据库_09

pivot_in_clause 中,如果指定别名就用别名,如果没有指定就用值当列名;而 pivot_clause中如果指定别名就连接到pivot_in_clause 转换后的相应列的名称的后面,如果没有指定就不用。pivot_clause中有多个聚合函数时,8s允许都不设置别名,8s会自动在后面加上_1,_2..依次类推。别名都不支持加单引号。

GBASE南大通用GBase 8s数据库Pivot函数_数据_10

其他使用上的限制,可参考《GBase 8s V8.8 SQL 指南:语法.pdf》


GBase 8s数据库官方文档:https://www.gbase.cn/download/gbase-8s-1?category=DOCUMENT


南大通用GBase技术社区:https://www.gbase.cn/community

通过本文的介绍,您可能已经对GBase 8s中的Pivot功能有了全面的认识。它不仅仅是一个简单的数据转换工具,更是数据分析的利器。下一篇文章,我们会展开介绍Unpivot的使用技巧,感谢您的阅读。

标签:转换,clause,8s,pivot,Pivot,deptno,GBase
From: https://blog.51cto.com/u_16565911/12108085

相关文章

  • k8s Ingress和 Ingress Controller
    一、Ingress和IngressController概述关于service四层代理介绍链接点我跳转1.1Ingressingress是k8s中的资源,主要是管理ingress-controller这个代理的配置文件。Ingress是对集群中服务的外部访问进行管理的API对象,典型的访问方式是HTTP,Ingress可以提供负载均衡、SSL终结和基......
  • k8s StorageClass 存储类
    目录一、概述1、StorageClass对象定义2、StorageClassYAML示例二、StorageClass字段1、provisioner(存储制备器)1.1、内置制备器1.2、第三方制备器2、reclaimPolicy(回收策略)3、allowVolumeExpansion(允许卷扩展)4、mountOptions(挂载选项)5、volumeBindingMode(卷绑定模式)5.1、Immedi......
  • k8s 访问一个 外部内部地址 代理到外网 作用是 k8s节点不直接开启外网ip
    nginx服务器访问本地的内网地址怎么代理访问到百度  要通过Nginx服务器代理访问到百度,你可以配置Nginx进行反向代理。以下是配置Nginx反向代理的步骤:安装Nginx:确保你的服务器上已经安装了Nginx。如果尚未安......
  • k8s pv 和 pvc
    要退出全屏模式,请按EscAccessModes(访问模式):AccessModes是用来对PV进行访问模式的设置,用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载ReadOnlyMany(ROX):只读权限,可以被多个节点挂载ReadWriteMany(RWX......
  • 15.10 在k8s部署grafana-deployment并导入k8s大盘
    本节重点介绍:grafanadeployment部署k8s大盘导入准备yaml部署工作1.修改yaml中的节点选择器标签k8s-node01改为你自己的节点2.在节点上创建数据目录mkdir-pv/data/grafana3.部署grafana#部署kubectlapply-fdeployment.yaml#检查[root@prome-master01grafana]#ku......
  • 15.8 在k8s部署prometheus statefulset
    本节重点介绍:检查,kube-systemns[root@prome-master01prometheus]#kubectlgetpod-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-7d75679df-7f7tx1/1Running088mcoredns-7d75679df-qmzbg1/1Running088metcd-prome-master011/1Running088mkube-apise......
  • K8S的StorageClass实战(NFS)
    本次实战的目标是快速创建NFS类型的StorageClass,并验证该StorageClass正常可用,全文由以下部分组成:创建StorageClass;通过helm下载tomcat的chart;修改chart,让tomcat使用刚才创建的StorageClass;在NFS服务端检查文件夹已正常写入;环境信息和准备工作以下是创建StorageCla......
  • k8s集群,master节点的初始化所用到的,init文件的分析,master节点的核心组件的作用,node节
    标准的k8s集群有三个组成部分管理控制节点、计算节点、私有镜像仓库。管理控制节点的功能:提供集群的控制对集群进行全局决策检测和响应集群事件管理控制节点中有四大核心服务服务端口含义用途APIServer6443api接口负责接收请求,实现功能Scheduler......
  • k8s怎么配置健康检查启动时间
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在Kubernetes(简称K8S)中,健康检查是非常重要的一个概念,它可以确保你的应用程序始终处于可用状态。而健康检查启动时间k8s,则是指在部署应用程序时,如何配置健康检查的启动时间,以确保服务在启动后一段时间内不会被认为是不可用。下面......
  • 云原生k8s高频面试题
    1.k8sservice有哪些类型?通过创建service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。其主要类型有:ClusterIP:虚拟的服务IP地址,该地址用于k8s集群内部的pod访问,在Node上kube-proxy通过设置的iptables规则进行转发;NodeP......