如何使用 BigQuery 在没有每个元素的情况下获取所有总和值?
Posted
技术标签:
【中文标题】如何使用 BigQuery 在没有每个元素的情况下获取所有总和值?【英文标题】:How to get all sums values with out each element using BigQuery? 【发布时间】:2020-08-06 03:28:14 【问题描述】:我在 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
的值的总和。如何修改此查询以获取没有其他 ID(如 12346, 12356, 12456, 13456, 23456
)的总和并查看删除了哪个?
【问题讨论】:
【参考方案1】:以下是 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
)
【讨论】:
以上是关于如何使用 BigQuery 在没有每个元素的情况下获取所有总和值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有加入的情况下在 BigQuery 的同一个表中选择匹配项
如何在没有授权令牌的情况下从 python 脚本查询 google-bigquery 中的私有表?