sql - одна строка для отдельных значений в данном столбце - PullRequest
0 голосов
/ 15 мая 2019

есть ли способ использовать sql, в частности, в bigquery, чтобы получить одну строку на уникальное значение в данном столбце

Я знаю, что это возможно при использовании последовательности запросов на объединение, в которой объединение имеет столько же значений, сколько и в интересующем столбце. но мне интересно, есть ли лучший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Вы можете использовать row_number():

select t.* except (seqnum)
from (select t.*, row_number() over (partition by col order by col) as seqnum
      from t
     ) t
where seqnum = 1;

Возвращает произвольную строку.Вы можете управлять какой строкой, настраивая order by.

Еще одно забавное решение в BigQuery использует структуры:

select array_agg(t limit 1)[ordinal(1)].*
from t
group by col;

Вы можете добавить order by (order by X limit 1) если вы хотите конкретную строку.

0 голосов
/ 15 мая 2019

Ниже для BigQuery Standard SQL

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

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

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 1 col UNION ALL
  SELECT 2, 1 UNION ALL
  SELECT 3, 1 UNION ALL
  SELECT 4, 2 UNION ALL
  SELECT 5, 2 UNION ALL
  SELECT 6, 3 
)
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY col 

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

Row id  col  
1   1   1    
2   4   2    
3   6   3    
0 голосов
/ 15 мая 2019

вот только форматированный формат:

select tab.* except(seqnum)
from (
 select *, row_number() over (partition by column_x order by column_x) as seqnum
 from `project.dataset.table`
) as tab
where seqnum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...