Google bigquery 基于字符串列的Bigquery计算值
我有这种桌子Google bigquery 基于字符串列的Bigquery计算值,google-bigquery,formula,Google Bigquery,Formula,我有这种桌子 Date Cat1 Nominal 01/05 A 100 01/05 B 200 02/05 C 300 02/05 A 400 03/05 C 200 我需要将每个“Cat1”计算为公式,条件是找不到行,则将其视为“0” 这是我想要的桌子 Date FormulaName Nominal 01/05 A-B+C -100 01/05 B/A 2 02/05 A-B+C 700 02/05 B/A
Date Cat1 Nominal
01/05 A 100
01/05 B 200
02/05 C 300
02/05 A 400
03/05 C 200
我需要将每个“Cat1”计算为公式,条件是找不到行,则将其视为“0”
这是我想要的桌子
Date FormulaName Nominal
01/05 A-B+C -100
01/05 B/A 2
02/05 A-B+C 700
02/05 B/A 0
03/05 A-B+C 200
03/05 B/A 0
如您所见,在01/05时,C未找到,然后被视为“0”,在02/05时与B相同
谢谢下面是BigQuery标准SQL
#standardSQL
SELECT day, x.*
FROM (
SELECT day,
IFNULL(MAX(IF(cat1 = 'A', nominal, NULL)), 0) AS A,
IFNULL(MAX(IF(cat1 = 'B', nominal, NULL)), 0) AS B,
IFNULL(MAX(IF(cat1 = 'C', nominal, NULL)), 0) AS C
FROM `project.dataset.table`
GROUP BY day
), UNNEST([
STRUCT('A - B + C' AS FormulaName, A - B + C AS nominal),
('B / A', IFNULL(SAFE_DIVIDE(B, A), 0))
]) x
如果要应用于问题中的样本数据,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT '01/05' day, 'A' cat1, 100 nominal UNION ALL
SELECT '01/05', 'B', 200 UNION ALL
SELECT '02/05', 'C', 300 UNION ALL
SELECT '02/05', 'A', 400 UNION ALL
SELECT '03/05', 'C', 200
)
SELECT day, x.*
FROM (
SELECT day,
IFNULL(MAX(IF(cat1 = 'A', nominal, NULL)), 0) AS A,
IFNULL(MAX(IF(cat1 = 'B', nominal, NULL)), 0) AS B,
IFNULL(MAX(IF(cat1 = 'C', nominal, NULL)), 0) AS C
FROM `project.dataset.table`
GROUP BY day
), UNNEST([
STRUCT('A - B + C' AS FormulaName, A - B + C AS nominal),
('B / A', IFNULL(SAFE_DIVIDE(B, A), 0))
]) x
结果是
Row day FormulaName nominal
1 01/05 A - B + C -100.0
2 01/05 B / A 2.0
3 02/05 A - B + C 700.0
4 02/05 B / A 0.0
5 03/05 A - B + C 200.0
6 03/05 B / A 0.0
('B/A',IFNULL(SAFE_DIVIDE(B,A),0)
我可以将此添加到另一个结构或添加更多公式吗?当然,您可以根据需要添加任意数量的公式-它们应该放在UNNEST([…])中。
目前有两个