显示包含所有可能维度的 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
您需要查询 client
和 shop
与 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)
我使用以下查询获取数据透视表 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
您需要查询 client
和 shop
与 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)