SQL Server - Как рассчитать количество объектов, чтобы достичь 80% от общей суммы? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть список компаний, их отрасли и их годовой доход.

Мне нужно разделить список по отраслям и выяснить, сколько компаний в каждой отрасли требуется, чтобы составлять 80%общий доход отрасли.

Я могу управлять разделом, я могу определить, что составляет 80% доходов каждой отрасли, но я не знаю, как определить, сколько компаний требуется, чтобы достичь 80%.Моя единственная идея - составить список для каждой отрасли, отсортировать доход по убыванию и суммировать, пока я не достигну 80%.

Существуют ли какие-либо встроенные функции или умные подходы, которые могут помочь мне здесь?

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Я бы использовал оконные функции:

select industry, count(*)
from (select t.*,
             sum(revenue) over (partition by industry order by revenue desc) as running_revenue,
             sum(revenue) over (partition by industry) as total_revenue
      from t
     ) t
where running_revenue - revenue < 0.8 * total_revenue
group by industry;

where включает в себя все компании до первой, которая проходит порог 80%.

Есть и другие функции, такие как ntile() и percentile(), которые можно использовать.Я считаю, что проще всего сделать расчет напрямую, используя sum().

...