Как рассчитать проценты внутри группы в postgresql? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть запрос, который группирует название компании, размер и доход.Это мой запрос:

with Test as
(select
id.name as Company
,CASE WHEN li.segment = 'Large' then 'Large Cap'
      WHEN li.segment = 'Medium' then 'Mid Cap'
      WHEN li.segment = 'Small' then 'Small Cap' else NULL end as Size
,sum(ia.amount) as Revenue
from base.company_rev ia
join base.company_detail id on id.company_account_id = ia.company_account_id
left join base.product_issued li on li.product_id = ia.product_id
where 1 = 1
and ia.create_date::date between '2018-05-01' and '2018-05-31'
group by id.name, li.segment
order by 1, 2, 3)

 select * 
 from Test
 group by company, size, revenue
 order by 1, 2, 3

Как добавить процент от дохода, к которому относится размер каждой компании?Я хочу сделать это на основе суммы в долларах в группировках размеров.

Пример.

Company A...Large Cap...15m = 60% (15/25)
Company A...Mid Cap...10m = 40% (10/25)

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы ищете оконную функцию, а именно SUM() OVER().

with test as
(
  select
    id.name as company
    ,case when li.segment = 'Large' then 'Large Cap'
          when li.segment = 'Medium' then 'Mid Cap'
          when li.segment = 'Small' then 'Small Cap' 
          else null end as size
    ,sum(ia.amount) as revenue
  from base.company_rev ia
  join base.company_detail id on id.company_account_id = ia.company_account_id
  left join base.product_issued li on li.product_id = ia.product_id
  where 1 = 1
  and ia.create_date::date between date '2018-05-01' and date '2018-05-31'
  group by id.name, li.segment
)
select
  company, 
  size, 
  revenue,
  revenue / sum(revenue) over (partition by company) * 100 as percentage
from test
order by company, size, revenue;
0 голосов
/ 29 мая 2018

(ia.amount / sum (ia.amount)) * 100 в процентах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...