首页 > 解决方案 > SQL 中是否有一种方法可以在交叉加入列组合帐户后对值求和?

问题描述

我使用 SQL 来生成两列的所有可能组合,包括使用交叉连接的一列。但是,虽然我已经能够创建列组合,但我不确定如何相应地聚合每个组合的销售额:

以下是“样本表”中的数据:

Gender    Generation    Sales
Male      Baby Boomer   30
Male      Silent Gen.   40
Female    Baby Boomer   70
Female    Silent Gen.   20

这是我生成组合的方式:

with Gendertbl AS 
(SELECT DISTINCT Gender FROM sampletable UNION select '' from sampletable),
with Generationtbl AS
(SELECT DISTINCT Generation from sampletable UNION select '' from sample table)

SELECT G1.Gender, G2.Generation
FROM sampletable G1
CROSS JOIN sampletable G2

这将创建:

Gender    Generation
Male
Male      Baby Boomer
Male      Silent Gen.
Female
Female    Baby Boomer
Female    Silent Gen.

我将如何交叉表销售以仅考虑“男性”、“女性”和“男婴潮”?理想情况下,这将创建:

Gender    Generation    Sales
Male                    100
Male      Baby Boomer   30
Male      Silent Gen.   40
Female                  200
Female    Baby Boomer   70
Female    Silent Gen.   90

标签: sql

解决方案


大多数数据库支持grouping sets,它允许:

select gender, generation, sum(sales)
from sample_table
group by grouping sets ( (gender, generation), (gender) );

这是在结果集中合并不同聚合级别的更简单方法。


推荐阅读