2015-01-24 3 views
1

Мой текущий запрос:SQL в процентах, а не общей

SELECT Delaytype, SUM('Delayhours') as cnt 
FROM delays 
GROUP BY Delaytype; 

Как получить cnt в процентах, а не в сумме общих вхождений?

+0

Процент от чего, все задержки? – canon

+0

Итак, в настоящее время я получаю Delaytype - engineering = 4 Human error = 5 Я хочу, чтобы 4 и 5 (часы задержки) в процентах составляли не все инженерные и человеческие ошибки. – Creaven

ответ

1

Я думаю, это то, что вы хотите:

SELECT Delaytype, SUM(Delayhours)/(SELECT SUM(Delayhours) FROM delays) * 100 as cntper 
FROM delays 
GROUP BY Delaytype 

Или, если ваш DB поддерживает подзапросы, это должно быть более эффективным :

SELECT Delaytype, cnt/SUM(cnt) * 100 FROM (
    SELECT Delaytype, SUM(Delayhours) as cnt 
    FROM delays 
    GROUP BY Delaytype 
) AS GroupedDelays 
0

Один из способов будет пересекать присоединиться общую сумму:

SELECT  d.Delaytype, SUM(d.Delayhours)/total_delay as pct 
FROM  delays 
CROSS JOIN (SELECT SUM(Delayhours) AS total_delay 
      FROM delays) t 
GROUP BY d.Delaytype; 
Смежные вопросы