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

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API