Я вытаскиваю статистические данные из нашей базы данных Oracle. Этот запрос ...разделение двух сложных столбцов (Oracle)
select
substr(cm.course_name,0,INSTR(cm.course_name,'.',1,1) - 1) as "SUBJECT",
count(*) as "TOTAL SHELLS",
count(case when (cs.size_total = 0 or cm.pk1 not in (select crsmain_pk1 from course_size))
and not exists (select 1 from course_contents where crsmain_pk1 = cm.pk1)
then 1 else null end) as "EMPTY SHELLS",
from course_main cm
left join course_size cs on cm.pk1 = cs.crsmain_pk1
where cm.row_status = 0
and cm.data_src_pk1 in (select pk1 from data_source where batch_uid like ('%2014FA'))
group by substr(cm.course_name,0,INSTR(cm.course_name,'.',1,1) - 1);
... формирует этот результат:
--SUBJECT, TOTAL SHELLS, EMPTY SHELLS
--DHY, 40, 19
--HSC, 10, 0
--BIO, 79, 7
В то время как этот результат пригодный к использованию, я хотел бы иметь процент, исчисленный между последними двумя столбцами, так что у меня есть в результате, как:
--SUBJECT, TOTAL SHELLS, EMPTY SHELLS, % EMPTY
--DHY, 40, 19, 48%
--HSC, 10, 0, 0%
--BIO, 79, 7, 9%
единственный способ сделать это AFAIK, чтобы дублировать каждый count
заявления и использовать их в качестве числителя и знаменателя, но это означало бы понапрасну перерасчет два значения мы уже есть - не говоря уже о том, чтобы сделать запрос неудобным и трудным для чтения. Есть ли способ лучше?
Я знал, что должно быть лучшее решение. Благодаря! – Cliff