在雪花 table 的某些列上应用分组依据后计算新值

Calculate a new value after applying group by on some columns for snowflake table

我想通过将一个值除以同一列中的另一个值来计算新值。 这是我的 table

的例子
REGION  COUNTRY STATE   VALUEX  INDICATOR
A         B      D       20       IND1
A         B      D       10       IND2
A         B      E       20       IND1
A         B      E       10       IND2

预期table结果

REGION  COUNTRY STATE   VALUEX  INDICATOR
A         B      D       2        IND3
A         B      E       2        IND3

从预期结果中我们可以看到“REGION COUNTRY STATE”列已分组并计算值,即 IND1/IND2 并将此值分配给新的 INIDCATOR“IND3”

雪花查询

 CREATE OR REPLACE TABLE MY_TABLE (
  Region   VARCHAR
 ,Country  VARCHAR
 ,State  VARCHAR
 ,ValueX INT
 ,Indicator VARCHAR
)
AS
  SELECT *
    FROM VALUES
           ('A','B','D',20,'IND1')
          ,('A','B','D',10,'IND2')
          ,('A','B','E',20,'IND1')
          ,('A','B','E',10,'IND2')
;

我是 Snowflake 的新手。不确定如何形成此输出。在互联网上没有找到任何答案。请帮忙!

您正在寻找 here 所述的枢轴功能。

select region, country, state, ind1/ind2 as valuex, 'IND3' as indicator
from my_table
pivot(sum(valuex) for indicator in ('IND1', 'IND2')) as p (region, country, state, ind1, ind2);

所以非关键答案可以是:

WITH data AS (
 SELECT *
    FROM VALUES
           ('A','B','D',20,'IND1')
          ,('A','B','D',10,'IND2')
          ,('A','B','E',20,'IND1')
          ,('A','B','E',10,'IND2')
    v( Region, Country, State, ValueX, Indicator)
)


SELECT region, 
    country, 
    state,
    SUM(IFF(Indicator='IND1', ValueX, null)) as ind1,
    SUM(IFF(Indicator='IND2', ValueX, null)) as ind2, 
    ind1/ind2 as valuex,
    'IND3' as indicator
FROM data
GROUP BY 1,2,3;

这可以归入以下工作答案:

SELECT region, 
    country, 
    state,
    SUM(IFF(Indicator='IND1', ValueX, null))/SUM(IFF(Indicator='IND2', ValueX, null)) as valuex,
    'IND3' as indicator
FROM data
GROUP BY 1,2,3;
REGION COUNTRY STATE VALUEX INDICATOR
A B D 2 IND3
A B E 2 IND3