6.postgresql--grouping()

sql 复制代码
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);

union all的实现

sql 复制代码
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 ;

grouping sets实现

sql 复制代码
 select coalesce (brand,'所有品牌') brand,coalesce(segment,'所有类型') segment,sum(quantity) from sales  
   group by grouping sets((brand,segment),(brand),(segment),())

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

用到,返回0

没用到,返回1

sql 复制代码
   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
相关推荐
qq_124987075335 分钟前
基于协同过滤算法的运动场馆服务平台设计与实现(源码+论文+部署+安装)
java·大数据·数据库·人工智能·spring boot·毕业设计·计算机毕业设计
数据知道1 小时前
PostgreSQL 核心原理:读已提交与可重复读的底层实现差异(事务隔离级别)
数据库·postgresql
crossaspeed1 小时前
MySQL的MVCC
数据库·mysql
2401_857683541 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
m0_706653231 小时前
使用Python自动收发邮件
jvm·数据库·python
松涛和鸣1 小时前
DAY67 IMX6 Development Board Configuration from Scratch
数据库·postgresql·sqlserver
路由侠内网穿透.1 小时前
fnOS 飞牛云 NAS 本地部署私人影视库 MoonTV 并实现外部访问
运维·服务器·网络·数据库·网络协议
怣501 小时前
MySQL表筛选分组全解析:排序、分组与限制的艺术
数据库·mysql
tsyjjOvO1 小时前
JDBC(Java Database Connectivity)
java·数据库
陌上丨1 小时前
如何保证Redis缓存和数据库数据的一致性?
数据库·redis·缓存