在雪花 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
我想通过将一个值除以同一列中的另一个值来计算新值。 这是我的 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 |