Как удалить повторяющиеся строки первичного ключа, а также сгруппировать их в SQL Bigquery? - PullRequest
1 голос
/ 28 февраля 2020

SQL BigQuery - у меня есть дубликаты строк в первичном ключе, которые мне нужно удалить (я не хочу навсегда удалить из таблицы). Мне нужно сгруппировать несколько других полей для агрегирования результатов, и у меня возникают проблемы, так как мне приходится включать первичный ключ, но я не могу группировать по нему и удалять дубликаты одновременно.

Я видел примеры в стеке, но у меня возникли проблемы, связанные с этим делом. Я попробовал следующее, и это не приводит к какой-либо группировке, потому что мне нужно сгруппировать по идентификатору, чтобы оставить его в операторе выбора.

SELECT Distinct (ID),Event_ID,Event_Name,Sum(Quantity), Sum(Price*Quantity)
FROM table
GROUP BY ID, Event_ID, Event_Name

Я попытался удалить идентификатор из предложения group by и добавить «Min (Distinct (ID))», как первая строка выбора, но она не удаляла дубликаты.

Я также пытался

SELECT Distinct (ID),Event_ID, Event_Name, Sum(Quantity) ,Sum(Price*Quantity), 
FROM table

INNER JOIN 
  (SELECT ID as DeduplicatedID
  FROM table 
  GROUP BY ID) deduplicatedtable ON table.ID = deduplicatedtable.ID

GROUP BY ID, Event_ID, Event_Name

и получил эту ошибку

Заранее спасибо!

Here is a screenshot

группы на уровне идентификатора, однако некоторые из этих идентификаторов имеют дубликаты, которые предоставляют неверные номера TotalQuantity и TotalRevenue при группировании по событию

Here is a picture

того, что я хотел бы, чтобы сгруппированные данные выглядели, но это неверно и включает дубликаты идентификаторов, когда поля количества и оборота суммируются.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Попробуйте сделать

WITH t as (
SELECT Distinct *
FROM table
)
SELECT ID, Event_ID, Event_Name, Sum(Quantity), Sum(Price*Quantity)
FROM t
GROUP BY ID, Event_ID, Event_Name
0 голосов
/ 02 марта 2020

Если, как я подозреваю, есть одно поле, которое не дублируется, найдите его и используйте ANY_VALUE(not_duplicated_field). Функция ANY_VALUE возвращает любое значение из ввода или NULL, если входных строк нет. Возвращаемое значение не определено c, что означает, что вы можете получать разные результаты при каждом использовании этой функции.

Например:

SELECT DISTINCT ID, Event_ID, ANY_VALUE(Event_Name), sum(Quantity), sum(Price*Quantity)
FROM blabla.jack
GROUP BY id, Event_ID
0 голосов
/ 28 февраля 2020

Делает ли это то, что вы хотите?

SELECT MIN(ID) as id, Event_ID,Event_Name,Sum(Quantity), Sum(Price*Quantity)
FROM table
GROUP BY Event_ID, Event_Name
...