Выбрать все столбцы, кроме одного в bigquery

Я хочу исключить счетчик, чтобы удалить дубликаты в запросе ниже

SELECT *, count(1) as count except (count)
  FROM PRD.sites  
  group by site,id ,site_desc,timestamp
  having count(1) < 2

но получил ошибку Неожиданное ключевое слово EXCEPT в [1:29]. Я использую стандартный SQL

2
0
3 669
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете попробовать ниже

select * except(count)
from
(
  SELECT *, count(1) as count 
  FROM PRD.sites  
  group by site,id ,site_desc,timestamp
  having count(1) < 2
)X

ИЛИ Вы можете использовать row_number () для поиска дубликатов

SELECT * except(rn)
FROM (
  SELECT
      *,
      ROW_NUMBER()
          OVER (PARTITION BY site,id ,site_desc,timestamp) as rn
  FROM FROM PRD.sites
)
WHERE rn= 1

Спасибо !!! но у меня около 20 столбцов в таблице, кроме site, id, site_desc, timestamp. Нужно ли мне включать все столбцы в раздел group by?

Nikhil BOORLA 26.10.2018 07:22

да, вам нужно включить всех в группу по @NikhilBOORLA

Fahmi 26.10.2018 07:24

@NikhilBOORLA, вы также можете использовать оконную функцию row_number () для поиска дубликатов

Fahmi 26.10.2018 07:26

Вы можете попробовать с временной таблицей

/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
Ответ принят как подходящий

Вам даже не нужно включать COUNT () в список SELECT - ниже будет отлично работать и удалит повторяющиеся строки на основе перечисленных полей.

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM PRD.sites t 
group by site,id ,site_desc,timestamp
having count(1) < 2

Выше будут показаны только строки, у которых нет дубликатов (на основе полей в группе).

Если вам нужно удалить дубликаты на основе полей - используйте ниже

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM PRD.sites t 
group by site,id ,site_desc,timestamp

Если вам нужно удалить дубликат на основе всей строки - вы можете использовать ниже

SELECT DISTINCT *
FROM PRD.sites

Почему вы используете для этого select as value?

Gordon Linoff 26.10.2018 13:38

@GordonLinoff - иначе все поля будут выводиться как СТРУКТУРА

Mikhail Berlyant 26.10.2018 16:24

@NikhilBOORLA - конечно, подумайте также о голосовании за ответ, если это помогло

Mikhail Berlyant 29.10.2018 07:26

Другие вопросы по теме