Объемы продаж n самых продаваемых поставщиков по месяцам в bigquery

# #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. Конечно. Пожалуйста, опубликуйте новый вопрос со всеми соответствующими деталями и образцом входных данных и ожидаемых результатов, и мы будем рады помочь