Как включить процентные вычисления в сводную выписку - PullRequest
0 голосов
/ 29 января 2020

Используя сводную инструкцию, я могу разбить счетчик в таблице данных по заголовку:

select * from (
  select * from ta
)
pivot (
COUNT(title)
 for title in ( 'worker', 'manager') )

Таким образом, результат выглядит так:

STATUS    'worker'  'manager'
started   3         1
finished  4         5
ready     3         4

Что Мне нужно добавить к нему проценты, то есть

STATUS    'worker'  percent  'manager'   percent
started   3         30%      1           10%
finished  4         40%      5           50%
ready     3         30%      4           40%

Любая идея, как я могу выполнить sh это в том же утверждении? см http://sqlfiddle.com/#! 4 / e6c04a / 1/0

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Вместо условного агрегирования, вы можете использовать -

select STATUS
      ,WORKER
      ,WORKER/SUM(WORKER) OVER()*100 percent
      ,MANAGER
      ,MANAGER/SUM(MANAGER) OVER()*100 percent 
from (
  select * from ta
)
pivot (
COUNT(title)
 for title in ( 'worker' AS WORKER, 'manager' AS MANAGER))

Здесь - это демо.

1 голос
/ 29 января 2020

Используйте условное агрегирование и оконные функции:

select status,
       sum(case when title = 'worker' then 1 else 0 end) as worker,
       sum(case when title = 'manager' then 1 else 0 end) as manager,
       (sum(case when title = 'worker' then 1 else 0 end) /
        sum(sum(case when title = 'worker' then 1 else 0 end)) over ()
       ) as worker,
       (sum(case when title = 'manager' then 1 else 0 end) /
        sum(sum(case when title = 'manager' then 1 else 0 end)) over ()
       ) as manager
from ta
group by status;

Здесь - это sql <> скрипка.

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