Совокупная сумма SQL запрос для расчета вклада продаж с Postgres - PullRequest
0 голосов
/ 21 апреля 2020

На основе этой таблицы мне нужно рассчитать, сколько каждого продукта вносит вклад в общий объем продаж, и иметь возможность отфильтровать для этих продуктов, которые составляют 80% вклада

| prod_id | sales date | units_sold | total_price |
|---------+------------+------------+-------------|
|       1 | 2020-04-20 |         10 |      100.00 |
|       1 | 2020-04-19 |          2 |       20.00 |
|       2 | 2020-04-20 |          5 |       15.00 |
|       2 | 2020-04-19 |          5 |       15.00 |
|       3 | 2020-04-20 |         25 |       25.00 |
|       3 | 2020-04-19 |         25 |       25.00 |

Учитывая, что общий объем продаж составляет равный 200 долларам США, Contribution % рассчитывается как:

  • prod_id = 1 -> (100,00 + 20,00) / 200,00 = 0,6
  • prod_id = 2 -> (15,00 + 15,00) / 200,00 = 0,15
  • prod_id = 3 -> (25,00 + 25,00) / 200,00 = 0,25

Столбец Accumulate Contribution % - это накопленная сумма Contribution %, упорядоченная по этому столбцу от более высоких к более низким значениям

Полученный запрос должен выглядеть примерно так, как показано ниже

| prod_id | units_sold | total_price | Contribution % | Accumulate Contribution % |
|---------+------------+-------------+----------------+---------------------------|
|       1 |         12 |         120 |            0.6 |                       1.0 |
|       3 |         50 |          50 |           0.25 |                       0.4 |
|       2 |         10 |          30 |           0.15 |                      0.15 |

1 Ответ

1 голос
/ 21 апреля 2020

Если я правильно понимаю, это агрегация с накопленной суммой:

select prod_id, sum(units_sold), sum(total_price),
       sum(total_price) / sum(sum(total_price)) over () as contribution_ratio,
       sum(total_price) / sum(sum(total_price)) over (order by sum(total_price) as accumulated
from t
group by prod_id
order by sum(total_price) desc;
...