我在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
在上面的例子中,我可以看到没有id = 6
的值的总和。如何修改此查询以在没有其他ids (如12346, 12356, 12456, 13456, 23456
)的情况下获得总和,并查看删除了哪个ids?
发布于 2020-08-06 04:58:00
下面是针对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
)
https://stackoverflow.com/questions/63276434
复制相似问题