Вложенное разбиение и ранжирование в большом запросе Google - PullRequest
0 голосов
/ 18 марта 2020

Ниже показано, как выглядят данные: enter image description here

Я хочу отсортировать эти данные по различным уровням для получения окончательного результата.

Уровень 1: Всякий раз, когда для имени есть повторяющиеся значения, я хочу получить наименьший рейтинг для каждого отдельного кортежа (идентификатор, имя, фамилия, пол).

Результат уровня 1: enter image description here

Уровень 2: На уровне 2 я хочу получить наименьший рейтинг для каждой гендерной категории для определенного имени.

Уровень 2 Результат: enter image description here

Окончательный результат: Для каждого имени, если ранг «мужской» и «женский» является затем верните то, что произойдет первым в таблице. Если это не так, верните запись с наименьшим рейтингом.

Ожидаемый конечный результат - enter image description here

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY ranking, id LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name
0 голосов
/ 18 марта 2020

Я подозреваю, что вы можете просто разделить по имени:

select *
from (
    select
        t.*,
        row_number() over(partition by name order by ranking, id) rn
    from mytable t
) t
where rn = 1

Второй критерий сортировки на id ломает t ie.

...