Давайте начнем с некоторых данных, которые мы хотим дедуплицировать:
WITH table AS (SELECT * FROM UNNEST([STRUCT('001' AS id, 1 AS a, 2 AS b), ('002', 3,5), ('001', 1, 4)]))
SELECT *
FROM table t
![enter image description here](https://i.stack.imgur.com/4rQ1A.png)
Теперь вместо *
ясобирается использовать t
для ссылки на всю строку:
SELECT t
FROM table t
![enter image description here](https://i.stack.imgur.com/zCrll.png)
Что произойдет, если я сгруппирую каждую из этих строк по их идентификатору:
SELECT t.id, ARRAY_AGG(t) tt
FROM table t
GROUP BY 1
![enter image description here](https://i.stack.imgur.com/tFBen.png)
Теперь у меня есть все строки с одинаковым идентификатором, сгруппированные вместе.Но позвольте мне выбрать только один:
SELECT t.id, ARRAY_AGG(t LIMIT 1) tt
FROM table t
GROUP BY 1
![enter image description here](https://i.stack.imgur.com/JftK8.png)
Это может выглядеть хорошо, но это все еще одна строка в одном массиве.Как мне получить только строку, а не массив:
SELECT t.id, ARRAY_AGG(t LIMIT 1)[OFFSET(0)] tt
FROM table t
GROUP BY 1
![enter image description here](https://i.stack.imgur.com/8Xf9P.png)
И если я хочу вернуть строку без группировки id
, ни префикс tt
:
SELECT tt.*
FROM (
SELECT t.id, ARRAY_AGG(t LIMIT 1)[OFFSET(0)] tt
FROM table t
GROUP BY 1
)
![enter image description here](https://i.stack.imgur.com/5xJHW.png)
И вот как вы дублируете строки на основе идентификаторов строк.