Удалить строки на основе повторяющегося поля в столбце - PullRequest
0 голосов
/ 22 мая 2019

У меня есть таблица с полями, подобными этим

F1  F2   F3  F4
1    4    A   5
2    4    A   5
3    4    B   5
4    4    C   5
5    4    D   5

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

F1  F2   F3  F4
1    4    A   5
3    4    B   5
4    4    C   5
5    4    D   5

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY F3

Вы можете проверить, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 F1, 4 F2, 'A' F3, 5 F4 UNION ALL
  SELECT 2, 4, 'A', 5 UNION ALL
  SELECT 3, 4, 'B', 5 UNION ALL
  SELECT 4, 4, 'C', 5 UNION ALL
  SELECT 5, 4, 'D', 5 
)
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY F3   

с результатом

Row F1  F2  F3  F4   
1   1   4   A   5    
2   3   4   B   5    
3   4   4   C   5    
4   5   4   D   5    
1 голос
/ 22 мая 2019

Вы можете использовать агрегирование:

select any_value(f1), any_value(f2), f3, any_value(f4)
from t
group by f3;

Если вы хотите, чтобы все значения были из определенной строки, вы можете использовать row_number():

select t.* except (seqnum)
from (select t.*,
             row_number() over (partition by f3 order by f3) as seqnum
      from t
     ) t;

Вы можете настроитьorder by, чтобы указать, какую строку вы хотите сохранить (скажем, наибольшее значение f1 или что-либо еще).

И еще один метод:

select as value any_value(t)
from t
group by f3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...