Как получить 5 самых больших чисел в столбце повторяющихся значений?

# #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