我在BigQuery中有一张桌子。我想计算按ID交替删除每个元素的列中所有值的总和。作为输出,我想查看已删除的ID和其他值的总和。
WITH t as (SELECT 1 AS id, "LY" as code, 34 AS value
UNION ALL
SELECT 2, "LY", 45
UNION ALL
SELECT 3, "LY", 23
UNION ALL
SELECT 4, "LY", 5
UNION ALL
SELECT 5, "LY", 54
UNION ALL
SELECT 6, "LY", 78)
SELECT lv id, SUM(lag) sum_wo_id
FROM
(SELECT *, FIRST_VALUE(id) OVER (ORDER BY id DESC) lv, LAG(value) OVER (Order by id) lag from t)
GROUP BY lv
在上面的示例中,我可以看到out的值总和id = 6
。如何修改此查询以获取不含其他ID的总和,12346, 12356, 12456, 13456, 23456
并查看删除了哪个ID ?
以下是BigQuery标准SQL
假设ID是不同的-您可以在下面简单地使用
#standardSQL
SELECT id AS removed_id,
SUM(value) OVER() - value AS sum_wo_id
FROM t
如果应用于问题的样本数据,则输出为
Row removed_id sum_wo_id
1 1 205
2 2 194
3 3 216
4 4 234
5 5 185
6 6 161
如果id不是唯一的-您可以按照以下示例首先按id分组
#standardSQL
SELECT id AS removed_id,
SUM(value) OVER() - value AS sum_wo_id
FROM (
SELECT id, SUM(value) AS value
FROM t
GROUP BY id
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句