# #sql #google-bigquery
Вопрос:
Я хотел бы объединить эту таблицу по идентификатору, как показано ниже. Приоритеты-золото, серебро, бронза, в таком порядке, со ссылкой на «столбец типа».
приоритеты: золото > серебро >> бронза
до
ID | Тип | текст |
---|---|---|
1 | Золото | банан |
1 | серебро | Apple |
2 | серебро | Оранжевый |
2 | бронза | авокадо |
3 | Золото | киви |
3 | бронза | черника |
после
ID | текст |
---|---|
1 | банан |
2 | Оранжевый |
3 | киви |
Ответ №1:
Попробуй array_agg
:
select id, array_agg(text order by length(type) limit 1)[offset(0)] as text
from mytable
group by id
Ответ №2:
Рассмотрим ниже
select id,
array_agg(text order by strpos(',bronze,silver,gold,', ',' || type || ',') desc limit 1)[offset(0)] as text
from `project.dataset.table`
group by id
если применить к образцам данных в вашем вопросе — вывод будет
Другой способ-это
select id, text
from `project.dataset.table`
where true
qualify row_number() over(partition by id order by strpos(',bronze,silver,gold,', ',' || type || ',') desc) = 1
с тем же выходом
Комментарии:
1. Скорее всего, так оно и есть
strpos('gold,silver,bronze', type)
.2. конечно! Спасибо, что проверили @SergeyGeron !