0
差异更好的代码开发
select CE1.CLASS_ID,
CE1.LOCATION_ID,
count(case CE1.FORMAT_ID when 5 then 1 end) as LIVE,
count(case CE1.FORMAT_ID when 14 then 1 end) as LB,
count(case CE1.FORMAT_ID when 15 then 1 end) as WEB,
SUM(DECODE (CE1.ROLE_ID,5,1,0)) FACULTY,
SUM(DECODE (CE1.ROLE_ID ,2,1,0)) MODERATOR,
SUM(DECODE (CE1.ROLE_ID ,3,1,0)) PANELIST,
SUM(DECODE (CE1.ROLE_ID,4,1,0)) PRESENTER,
COUNT(CE1.USER_ID) TOT
from C_EDUCATION1 CE1
GROUP BY CE1.LOCATION_ID, CE1.CLASS_ID
我们正在开发现有系统和我们发现混合使用COUNT和解码。 如果我们理解正确,我们可以转换为以下代码。
select CE1.CLASS_ID,
CE1.LOCATION_ID,
SUM(DECODE (CE1.FORMAT_ID ,5,1,0)) LIVE,
SUM(DECODE (CE1.FORMAT_ID ,14,1,0)) LB,
SUM(DECODE (CE1.FORMAT_ID,15,1,0)) WEB,
SUM(DECODE (CE1.ROLE_ID,5,1,0)) FACULTY,
SUM(DECODE (CE1.ROLE_ID ,2,1,0)) MODERATOR,
SUM(DECODE (CE1.ROLE_ID ,3,1,0)) PANELIST,
SUM(DECODE (CE1.ROLE_ID,4,1,0)) PRESENTER,
COUNT(CE1.USER_ID) TOT
from C_EDUCATION1 CE1
GROUP BY CE1.LOCATION_ID, CE1.CLASS_ID
OR 所有COUNT
我们想知道在其他性能问题上的分歧,或。 更好的方式存在吗?
我不知道使用CASE与DECODE之间的性能差异,但CASE是ANSI,因此如果DECODE被换出为CASE,查询将更具可移植性。我会考虑将DECODE弃用,但为了向后兼容,它永远不会消失。 – 2011-01-26 17:21:40