# #google-bigquery
Вопрос:
у меня есть такая таблица в bigquery (260000 строк).:
vendor date item_price
x 2021-07-08 23:41:10 451,5
y 2021-06-14 10:22:10 41,7
z 2020-01-03 13:41:12 74
s 2020-04-12 01:14:58 88
....
именно то, что я хочу, — это сгруппировать эти данные по месяцам и найти сумму продаж только 20 крупнейших поставщиков в этом месяце. Ожидаемый результат:
month sum_of_only_top20_vendor's_sales
2020-01 7857
2020-02 9685
2020-03 3574
2020-04 7421
.....
Ответ №1:
Рассмотрим следующий подход
select month, sum(sale) as sum_of_only_top20_vendor_sales
from (
select vendor,
format_datetime('%Y%m', date) month,
sum(item_price) as sale
from your_table
group by vendor, month
qualify row_number() over(partition by month order by sale desc) <= 20
)
group by month
Комментарии:
1. это работает. Большое спасибо.
Ответ №2:
Еще одно решение, которое потенциально может показать гораздо лучшую производительность при работе с действительно большими данными:
select month,
(select sum(sum) from t.top_20_vendors) as sum_of_only_top20_vendor_sales
from (
select
format_datetime('%Y%m', date) month,
approx_top_sum(vendor, item_price, 20) top_20_vendors
from your_table
group by month
) t
или с небольшим рефакторингом
select month, sum(sum) as sum_of_only_top20_vendor_sales
from (
select
format_datetime('%Y%m', date) month,
approx_top_sum(vendor, item_price, 20) top_20_vendors
from your_table
group by month
) t, t.top_20_vendors
group by month
Комментарии:
1. Я узнал много нового. Спасибо.
2. Еще раз здравствуйте. Можем ли мы добавить другие данные этих поставщиков в дополнение к общему объему продаж? Например, столбец=sum_of_only_top20_vendor_sales (это уже существует), другой столбец= item_counts(общее количество товаров, проданных поставщиками в первом столбце.) другие столбцы= discount_price (общая сумма скидки, предоставленная поставщиками в первом столбце.) Эта информация (количество товаров и скидки) приведена в таблице. Я пытался много раз, но безуспешно.
3. Конечно. Пожалуйста, опубликуйте новый вопрос со всеми соответствующими деталями и образцом входных данных и ожидаемых результатов, и мы будем рады помочь