GreenPlum[postgreSQL]之-Grouping Sets、grouping()函数、cube方式

2023-12-10 13:38

本文主要是介绍GreenPlum[postgreSQL]之-Grouping Sets、grouping()函数、cube方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GreenPlum[postgreSQL]之-Grouping Sets

前言

grouping sets是为了简化代码而设计的一种风格,通常可以将不同纬度的统计数据放在同一个视图或者表中,有点类似于cube立方体的风格。

参考网址:https://www.postgresqltutorial.com/postgresql-grouping-sets/

1 需求

现有以下数据,其中brand\segment是纬度,我们需要根据这2个纬度算出所有维度组合下的所有的sum()度量metrix

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (brand VARCHAR NOT NULL,segment VARCHAR NOT NULL,quantity INT NOT NULL,PRIMARY KEY (brand, segment)
);INSERT INTO sales (brand, segment, quantity)
VALUES('ABC', 'Premium', 100),('ABC', 'Basic', 200),('XYZ', 'Premium', 100),('XYZ', 'Basic', 300);

需求目标如下,展示以下数据。

在这里插入图片描述

2 实现方式

2.1 union all的方式

select brand,segment,sum(quantity) from sales group by brand,segment
union all
select brand,null,sum(quantity) from sales group by brand
union all
select null,segment,sum(quantity) from sales group by segment
union all
select null,null,sum(quantity) from sales ;

2.2 grouping sets的方式

--很明显代码简洁了许多,如果纬度组合较多,那么这种方式会更加方便简洁
select brand,segment,sum(quantity) from sales
group by grouping sets((brand,segment),(brand),(segment),())

2.3 grouping 方法

pg既然提供了grouping sets,就提供了对应了对应的grouping()函数,用来判断是否该纬度在该指标统计中是否被用到

  • 用到,返回0
  • 没用到,返回1
select grouping(brand) as brand_used,grouping(segment) as segment_used,brand,segment,sum(quantity) 
from sales
group by grouping sets((brand,segment),(brand),(segment),())
having grouping(brand) = 1

2.4 cube方式

除了grouping sets可以动态选择不同的维度组合,cube自动选择所有的维度组合,构建多维模型。

select brand,segment,sum(quantity) from sales
group by cube(brand,segment)--[,another_dimensions......]

这篇关于GreenPlum[postgreSQL]之-Grouping Sets、grouping()函数、cube方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477254

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni