PL SQL Pivot:使用不同的聚合
PL SQL Pivot: use different aggregates
我想按如下所示对每个国家/地区的总和(销售额)进行透视。但是价格栏应该是每个商店的平均价格。所以,我很想得到这个结果:
期望的结果:
店铺
avg_price
美国
CN
2
6
100
10
3
5
60
10
当前结果:
店铺
价格
美国
CN
2
5
无
5
2
7
100
5
3
5
60
10
我可以跳过枢轴部分中的价格,稍后再重新加入。但是,我相信有一个更明智的选择。你能帮帮我吗?
查询(到目前为止)
SELECT *
FROM (
SELECT 'US' AS country, 2 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 2 AS shop, 5 AS sales, 7 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 3 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 3 AS shop, 5 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 2 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 2 AS shop, 5 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 3 AS shop, 10 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 3 AS shop, 5 AS sales, 5 AS price
FROM dual
)
PIVOT ( SUM(sales) FOR country IN ( 'US','CN' )
);
您需要按 shop
分组,同时为每个旋转列添加双引号别名,例如
SELECT shop, AVG(price) AS avg_price, SUM("US") AS us, SUM("CN") AS cn
FROM t
PIVOT ( SUM(sales) for country in ( 'US' AS "US",'CN' AS "CN" ) )
GROUP BY shop
我想按如下所示对每个国家/地区的总和(销售额)进行透视。但是价格栏应该是每个商店的平均价格。所以,我很想得到这个结果:
期望的结果:
店铺 | avg_price | 美国 | CN |
---|---|---|---|
2 | 6 | 100 | 10 |
3 | 5 | 60 | 10 |
当前结果:
店铺 | 价格 | 美国 | CN |
---|---|---|---|
2 | 5 | 无 | 5 |
2 | 7 | 100 | 5 |
3 | 5 | 60 | 10 |
我可以跳过枢轴部分中的价格,稍后再重新加入。但是,我相信有一个更明智的选择。你能帮帮我吗?
查询(到目前为止)
SELECT *
FROM (
SELECT 'US' AS country, 2 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 2 AS shop, 5 AS sales, 7 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 3 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 3 AS shop, 5 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 2 AS shop, 50 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 2 AS shop, 5 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'US' AS country, 3 AS shop, 10 AS sales, 5 AS price
FROM dual
UNION ALL
SELECT 'CN' AS country, 3 AS shop, 5 AS sales, 5 AS price
FROM dual
)
PIVOT ( SUM(sales) FOR country IN ( 'US','CN' )
);
您需要按 shop
分组,同时为每个旋转列添加双引号别名,例如
SELECT shop, AVG(price) AS avg_price, SUM("US") AS us, SUM("CN") AS cn
FROM t
PIVOT ( SUM(sales) for country in ( 'US' AS "US",'CN' AS "CN" ) )
GROUP BY shop