0
我從我們的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 2014-10-01 15:08:51