如何查询 table 并按条件汇总某些列,而不是其他列?
How to query table and sum up certain columns by criteria, but not others?
从 table 开始,假设:
A
B
C
1
1
99
2
2
88
3
3
77
我正在尝试编写一个查询,该查询会导致 table 在 C 列中具有不同的值,基于以下条件:当 A 具有值 2
时,C 的值应该是现有值 + 来自 C 的值,其中 A 是 1
。结果如下:
A
B
C
1
1
99
2
2
187
3
3
77
不确定分组在这里是否有意义,特别是因为可能有多个相似的标准。我能想到的关闭查询是
SELECT A, B, C+(SELECT C FROM table1 WHERE A=1 LIMIT 1) FROM table1 WHERE A=2;
但这无效 SQL,因为不能像这样使用子查询。欢迎任何建议,即使它们涉及以某种方式改变原始 table.
的结构
考虑以下方法(在 BigQuery 中测试)
select a, b, c +
case a
when 2 then sum(if(a = 1, c, 0)) over()
else 0
end c
from your_table
如果应用于您问题中的示例数据 - 输出为
SELECT
A,
B,
CASE
WHEN A=2 THEN C + (SELECT C FROM table WHERE A = 1)
ELSE C
END AS C
FROM
table;
从 table 开始,假设:
A | B | C |
---|---|---|
1 | 1 | 99 |
2 | 2 | 88 |
3 | 3 | 77 |
我正在尝试编写一个查询,该查询会导致 table 在 C 列中具有不同的值,基于以下条件:当 A 具有值 2
时,C 的值应该是现有值 + 来自 C 的值,其中 A 是 1
。结果如下:
A | B | C |
---|---|---|
1 | 1 | 99 |
2 | 2 | 187 |
3 | 3 | 77 |
不确定分组在这里是否有意义,特别是因为可能有多个相似的标准。我能想到的关闭查询是
SELECT A, B, C+(SELECT C FROM table1 WHERE A=1 LIMIT 1) FROM table1 WHERE A=2;
但这无效 SQL,因为不能像这样使用子查询。欢迎任何建议,即使它们涉及以某种方式改变原始 table.
的结构考虑以下方法(在 BigQuery 中测试)
select a, b, c +
case a
when 2 then sum(if(a = 1, c, 0)) over()
else 0
end c
from your_table
如果应用于您问题中的示例数据 - 输出为
SELECT
A,
B,
CASE
WHEN A=2 THEN C + (SELECT C FROM table WHERE A = 1)
ELSE C
END AS C
FROM
table;