显示包含所有可能维度的 CUBE PostgreSQL 结果

Show CUBE PostgreSQL results with all possible dimensions

我使用以下查询获取数据透视表 table 的多维数据集结果:

SELECT
    client,
    shop,
    SUM (sales)
FROM
    sales
GROUP BY
    CUBE (client, shop)
ORDER BY
    client,
    shop;

并得到一个输出:

client     shop       sales
null       null        1000
null       Shop A       400
null       Shop B       600
Client A   null         800
Client A   Shop A       200
Client A   Shop B       600
Client B   null         200
Client B   Shop A       200

请注意,客户 B 仅向商店 A 销售。

但我需要一个输出(添加了最后一行),其中输出显示维度(客户、商店)中所有可能的交叉点。如何更改我的查询?

client     shop       sales
null       null        1000
null       Shop A       400
null       Shop B       600
Client A   null         800
Client A   Shop A       200
Client A   Shop B       600
Client B   null         200
Client B   Shop A       200
Client B   Shop B      null

您需要查询 clientshop 与 table 左连接的笛卡尔积:

select 
    client, 
    shop, 
    sum(sales)
from (
    select distinct client 
    from sales
    ) c
cross join (
    select distinct shop 
    from sales
    ) s
left join 
    sales t using (client, shop)
group by 
    cube(client, shop)
order by 
    client, shop;

  client  |  shop  | sum  
----------+--------+------
 Client A | Shop A |  200
 Client A | Shop B |  600
 Client A |        |  800
 Client B | Shop A |  200
 Client B | Shop B |     
 Client B |        |  200
          | Shop A |  400
          | Shop B |  600
          |        | 1000
(9 rows)