根据 Google Big Query 中的案例分组和求和
Group by and sum depending on cases in Google Big Query
数据看起来像-
A_value B_value C_value Type
1 null null A
2 null null A
null 3 null B
null 4 null B
null null 5 C
null null 6 C
当类型为 'A' 我想对 'A_value' 求和并存储在另一个名为 'Type_value' 的列中,当类型为 'B' 我想对 'B_value' 并存储在 'Type_value' 列中,并为 'C'
做类似的事情
预期结果-
Type_value Type
3 A
7 B
11 C
如何实现这个结果?
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT SUM(CASE Type
WHEN 'A' THEN A_value
WHEN 'B' THEN B_value
WHEN 'C' THEN C_value
ELSE 0
END) AS Type_value, Type
FROM `project.dataset.table`
GROUP BY Type
如果应用于您问题中的样本数据 - 结果是
Row Type_value Type
1 3 A
2 7 B
3 11 C
另一个可能的选择是重用这样一个事实,即您的数据具有仅在相应列中具有价值的模式。所以如果它是真的 - 你可以使用以下版本
#standardSQL
SELECT SUM(IFNULL(A_value, 0) + IFNULL(B_value, 0) + IFNULL(C_value, 0)) AS Type_value, Type
FROM `project.dataset.table`
GROUP BY Type
显然结果相同
数据看起来像-
A_value B_value C_value Type
1 null null A
2 null null A
null 3 null B
null 4 null B
null null 5 C
null null 6 C
当类型为 'A' 我想对 'A_value' 求和并存储在另一个名为 'Type_value' 的列中,当类型为 'B' 我想对 'B_value' 并存储在 'Type_value' 列中,并为 'C'
做类似的事情预期结果-
Type_value Type
3 A
7 B
11 C
如何实现这个结果?
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT SUM(CASE Type
WHEN 'A' THEN A_value
WHEN 'B' THEN B_value
WHEN 'C' THEN C_value
ELSE 0
END) AS Type_value, Type
FROM `project.dataset.table`
GROUP BY Type
如果应用于您问题中的样本数据 - 结果是
Row Type_value Type
1 3 A
2 7 B
3 11 C
另一个可能的选择是重用这样一个事实,即您的数据具有仅在相应列中具有价值的模式。所以如果它是真的 - 你可以使用以下版本
#standardSQL
SELECT SUM(IFNULL(A_value, 0) + IFNULL(B_value, 0) + IFNULL(C_value, 0)) AS Type_value, Type
FROM `project.dataset.table`
GROUP BY Type
显然结果相同