Сумма накопления в среднем - PullRequest
       100

Сумма накопления в среднем

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

У меня есть таблица EMP, которая соединена с другой таблицей;EMP имеет empname и emplength (в месяцах), как это

'A' 100
'B' 110
'D' 80
'E' 120

Я рассчитываю среднюю продолжительность в год, т.е. делю на 12 для каждого сотрудника и всего.Здесь вопрос заключается в том, как рассчитать общую среднюю сумму, используя накопительный пакет?

вывод должен быть таким:

'A' 8.33
'B' 9.16
'D' 6.66
'E' 10.00
total 8.54

Ответы [ 2 ]

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

Вы можете использовать grouping sets:

select coalesce(empname, total) as empname, avg(emplength)
from . . .
group by grouping sets (empname, ());
0 голосов
/ 28 февраля 2019

Вам не нужно ROLLUP для этого сценария.Вы можете добиться этого, используя UNION ALL, как показано ниже.

select name, [length] / 12.0
from yourtable
union all
select 'Total', avg(length/12.0)
from yourtable

Но все же, если вы хотите использовать ROLLUP, вы можете попробовать выполнить следующее:

select name , avg([length])
from
(
    select name, [length] / 12.0 as [length]
    from yourtable
    cross join
    (
     values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
    ) t(a)
) t
group by  rollup(name)

Онлайн демо

...