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
相关推荐
djjdjdjdjjdj12 分钟前
如何用参数解构在函数入口处直接提取对象属性
jvm·数据库·python
forEverPlume24 分钟前
mysql如何批量增加表的字段_脚本化DDL操作实践
jvm·数据库·python
精益数智工坊31 分钟前
物料管理是什么?物料管理的具体工作有哪些?
大数据·前端·数据库·人工智能·精益工程
m0_5964063734 分钟前
CSS如何高效引入样式表_对比link标签与import指令的性能差异
jvm·数据库·python
行云的逆袭36 分钟前
树莓派4B安装adminer数据库简易工具
数据库
solihawk37 分钟前
服务器内存被谁“偷”走了?
服务器·数据库
德彪稳坐倒骑驴1 小时前
SQL连续登录问题
服务器·数据库·sql
葡萄城技术团队1 小时前
告别臃肿 SQL:HR 系统如何实现“字段级”权限控制与动态脱敏方案?
数据库·sql
SQL必知必会1 小时前
SQL HAVING 是什么?一篇讲清 WHERE 和 HAVING 的区别
数据库·sql
weixin_568996061 小时前
c++如何实现日志文件的异步落盘功能_基于无锁队列方案【附代码】
jvm·数据库·python