Вернуть рекорд с наибольшим количеством - PullRequest
0 голосов
/ 19 июня 2020

Данные, над которыми я работаю, выглядят следующим образом:

A_ID          B_ID           count
123           abcd          1000
123           aaaa          2000
123           aaaa          3000
456           null          50
456           bbbb          6000
456           cccc          450

Я хочу иметь возможность извлечь B_id, который имеет наибольшее количество для данного A_id

Результат должен выглядеть like-

A_ID          B_ID        count
123           aaaa        3000
456           bbbb        6000

Как добиться такого результата?

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Один из вариантов - фильтровать с помощью подзапроса:

select t.*
from mytable t
where t.count = (select max(t1.count) from mytable t1 where t1.a_id = t.a_id)

Вы также можете использовать оконные функции:

select t.* except(rn)
from (
    select t.*, rank() over(partition by a_id order by count desc) rn
    from mytable t
) t
where rn = 1
1 голос
/ 19 июня 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY count DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY a_id   

, если применить к образцу данных из вашего вопроса - результат будет

Row a_id    b_id    count    
1   123     aaaa    3000     
2   456     bbbb    6000     
1 голос
/ 19 июня 2020

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

select array_agg(t order by count desc limit 1)[ordinal(1)].*
from t
group by a_id;
...