# #google-cloud-platform #google-bigquery
Вопрос:
Я хочу использовать SQL-запрос, чтобы найти 3 самых больших числа во вложенной таблице. если количество повторяемых значений меньше 5, то перечислите их столько, сколько есть. Итак, вот вложенная таблица:
Поэтому я хочу получить 3 самых больших возраста для каждой компании.
select companyID,customer
from test.table, unnest(customer) as c
order by c.age
limit 3
но ограничение ничего не меняет.Я также попытался добавить предложение where where c.age>25
в качестве примера, но заметил, что условие вообще не действует.
Любой намек будет оценен по достоинству.
Ответ №1:
Рассмотрим приведенное ниже решение (без дополнительной группы по необходимости)
select * replace (
array(select as struct * from t.customer order by age desc limit 5)
as customer)
from `project.dataset.table` t
Ответ №2:
Попробуйте array_agg:
select
companyID,
array_agg(struct(c.name, c.age) order by c.age desc limit 3)
from test.table, unnest(customer) as c
group by 1
Комментарии:
1. Спасибо, Сергей, с чего мне действительно начать изучать вложенные таблицы и такого рода запросы? кстати, я принял ваш ответ. Спасибо
2.Просто документы Google: cloud.google.com/bigquery/docs/reference/standard-sql/… cloud.google.com/bigquery/docs/reference/standard-sql/… cloud.google.com/bigquery/docs/reference/standard-sql/arrays