我在表格中有这些数据
column 1 column 2 condition value
1 ABC 1 1
1 строка 2 0 1
1 строка 3 0 1
1 строка 4 0 1
1 строка 5 0 1
1 строка 6 0 1
2 BCD 1 1
2 строка 2 0 1
2 строка 3 0 1
我不会有这个结果:
column 1 column 2 sum of value
1 ABC 6
2 BCD 3
此结果仅按第一列分组。第二列显示条件为1的那些行上的值。在第三列中,我们得到列值的总和,不包括任何条件。是否可以在没有连接的情况下执行此操作(因为表非常大)
答案 0 :(得分:4)
以下是BigQuery Standard SQL
#standardSQL
SELECT
column1,
MAX(IF(condition = 1, column2, '')) column2,
SUM(value)sumOfValue
FROM `project.dataset.table`
GROUP BY column1
您可以使用以下问题中的示例进行测试/播放
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 column1, 'ABC' column2, 1 condition, 1 value UNION ALL
SELECT 1, 'строка 2', 0, 1 UNION ALL
SELECT 1, 'строка 3', 0, 1 UNION ALL
SELECT 1, 'строка 4', 0, 1 UNION ALL
SELECT 1, 'строка 5', 0, 1 UNION ALL
SELECT 1, 'строка 6', 0, 1 UNION ALL
SELECT 2, 'BCD', 1, 1 UNION ALL
SELECT 2, 'строка 2', 0, 1 UNION ALL
SELECT 2, 'строка 3', 0, 1
)
SELECT
column1,
MAX(IF(condition = 1, column2, '')) column2,
SUM(value)sumOfValue
FROM `project.dataset.table`
GROUP BY column1
结果如预期(我认为)
column1 column2 sumOfValue
1 ABC 6
2 BCD 3
上面的解决方案假设您每列column1只有一行条件= 1。如果不是这种情况 - 上面将给出来自column2的一个(MAX)值。如果您需要对所有此类值进行分组 - 请参阅下面的选项
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 column1, 'ABC' column2, 1 condition, 1 value UNION ALL
SELECT 1, 'строка 2', 0, 1 UNION ALL
SELECT 1, 'строка 3', 1, 1 UNION ALL
SELECT 1, 'строка 4', 0, 1 UNION ALL
SELECT 1, 'строка 5', 1, 1 UNION ALL
SELECT 1, 'строка 6', 0, 1 UNION ALL
SELECT 2, 'BCD', 1, 1 UNION ALL
SELECT 2, 'строка 2', 0, 1 UNION ALL
SELECT 2, 'строка 3', 0, 1
)
SELECT
column1,
REGEXP_REPLACE(STRING_AGG(IF(condition = 1, CONCAT(column2, ','), ''),''), r',$', '') column2,
SUM(value)sumOfValue
FROM `project.dataset.table`
GROUP BY column1
在这种情况下,结果将是
column1 column2 sumOfValue
1 ABC,строка 3,строка 5 6
2 BCD 3