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

Demo