我有以下查询:一个日期检查整个查询
select
fp.id,
fr.id,
sum(case
when to_date(fp.offered_date) BETWEEN TO_DATE(:ad_startdate, 'YYYY-MM-DD')
AND TO_DATE(:ad_enddate, 'YYYY-MM-DD') and fp.result <> 'E'
then 1
else 0
end) total,
sum(case when fp.result = 'G'
and to_date(fp.offered_date) >= :ad_startdate
and to_date(fp.offered_date) <= :ad_enddate then 1 else 0 end) colorgreen,
sum(case when fp.resultat = 'R'
and to_date(fp.offered_date) >= :ad_startdate
and to_date(fp.offered_date) <= :ad_enddate then 1 else 0 end) colorred
FROM
fruit_properties fp, fruit fr
WHERE
fp.id = fr.id
GROUP BY
fp.id, fr.id
我检查日期1次次金额列,并有此可一次不知何故的感觉?现在,如果我只在总列中检查一次,那么colorgreen + colorred可能会比总数大,因为无论它们具有哪个日期,它都会计数。
我的查询可以以某种方式增强吗?
是的,你是对的,我很新的SQL,这是一个马虎做一个。其实查询已经是一个嵌套选择,我希望避免另一个。什么会提供最好的性能,我的解决方案与2选择或你的日期检查更好,但与3? –
虽然客户端使用这个特定的SQL确保它是一个日期输入:) –
不要害怕嵌套选择。他们不(必然)暗示更糟的表现(它只是一个观点)。 oracle可以并且会在内部重写查询。你会发现嵌套select与原始查询一样。 – DazzaL