2012-01-17 5 views
4

Например, если у меня есть столбец, представляющий флаг Y или N, в каком проценте Y и какой процент N? Я знаю, что могу написать запрос, чтобы найти каждый из этих чисел, а затем рассчитать процент самостоятельно, но я полагаю, что это должно быть прямолинейным, делая это в PL/SQL с аналитическими функциями, такими как NTILE.Как определить распределение значения столбца в Oracle?

SELECT COUNT(1), enabled_flag 
FROM widgets 
GROUP BY enabled_flag; 

дает мне:

COUNT(1) | enabled_flag 
    123124 | Y 
    234234 | N 

мне нужно:

enabled_flag | percentage 
Y   |   34 
N   |   56 

Может кто-нибудь мне точку в правильном направлении?

ответ

5

Попробуйте аналитическую функцию как таковую:

SELECT round(100*COUNT(1)/sum(count(1)) over(),0), enabled_flag 
FROM widgets 
GROUP BY enabled_flag; 

EDIT ... Вы можете также использовать функцию RATIO_TO_REPORT, которые могли бы сделать его выглядеть чище и проще в обслуживании:

SELECT round(100*RATIO_TO_REPORT(count(1)) over(),0), enabled_flag 
FROM widgets 
GROUP BY enabled_flag; 
+0

+ 1 RATIO_TO_REPORT для победы! – ninesided

1

Возможно, это не лучший способ, но я думаю, это должно сработать.

select count(*) * 100/(select count(*) from widgets), enabled_flag 
from widgets 
group by enabled_flag 
Смежные вопросы