Как получить все суммы сумм без каждого элемента с помощью BigQuery? - PullRequest
1 голос
/ 06 августа 2020

У меня есть таблица в BigQuery. Я хочу подсчитать все суммы значений в столбце, удаляя каждый элемент поочередно по идентификатору. В качестве вывода я хочу увидеть удаленный идентификатор и сумму других значений.

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. Как я могу изменить этот запрос, чтобы получить суммы без других идентификаторов, например 12346, 12356, 12456, 13456, 23456, и посмотреть, какой из них удален?

1 Ответ

1 голос
/ 06 августа 2020

Ниже для BigQuery Standard SQL

Предполагая, что идентификаторы различны - вы можете просто использовать ниже

#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     

В случае, если идентификатор не уникален - вы можете сначала сгруппировать по идентификатору, как в примере ниже

#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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...