【问题标题】:PL SQL Pivot: use different aggregatesPL SQL Pivot:使用不同的聚合
【发布时间】:2021-08-19 15:15:00
【问题描述】:

我想按以下方式调整每个国家/地区的总和(销售额)。但是价格列应该是每家商店的平均值。所以,我很想得到这样的结果:

期望的结果:

shop avg_price US CN
2 6 100 10
3 5 60 10

当前结果:

shop price US CN
2 5 null 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' )
    );

【问题讨论】:

    标签: sql oracle pivot


    【解决方案1】:

    您需要按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

    【讨论】:

    • 谢谢!我想,双引号的别名有所不同(我之前一定试过没有它们的这个版本......)
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2016-10-16
    • 2010-11-17
    • 2014-12-30
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多