2016-12-18 3 views
1

У меня есть следующий запрос, где я пытаюсь рассчитать процентный столбец, но он не вычисляет правильно, показывая 100 для каждой строки, которая явно неверна.Вычисление процентов наилучшим образом рядом с подсчетом

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

Select 
DrugName, 
Occurrences, 
(Occurrences/sum(Occurrences)) * 100 as Percentage 
from 
(
select 
D.DrugName, 
count(*) as Occurrences 
from 
Visit V 
Inner Join Drug D on 
V.DrugID = D.DrugID 
where 
StartDate >='01 Oct 2016' and 
EndDate < '01 Jan 2017' 
group by 
D.DrugName 
) a 
group by 
DrugName, 

ответ

1

Лучший способ сделать это использует оконные функции:

select D.DrugName, 
     count(*) as Occurrences, 
     count(*) * 100.0/sum(count(*)) over() 
from Visit V Inner Join 
    Drug D 
    on V.DrugID = D.DrugID 
where StartDate >= '2016-10-01' and 
     EndDate < '2017-01-01' 
group by D.DrugName; 
+0

Спасибо, но unfortnately, что не работает. Он возвращает 0.024390243902 для каждой строки. – Philip

+0

Спасибо, Гордон, изменив 1.0 на 100.0, сделал трюк для меня. Как предложил Джон. – Philip