ORACLE數(shù)據(jù)統(tǒng)計(jì)0的處理
大概是前一周去見(jiàn)客戶,他要弄了年終統(tǒng)計(jì)報(bào)表,從系統(tǒng)中所有臺(tái)帳的基礎(chǔ)數(shù)據(jù)去統(tǒng)計(jì)總算、容量等數(shù)據(jù)。
拿到統(tǒng)計(jì)模板一看,傻眼了需要統(tǒng)計(jì)近百項(xiàng),而且每一項(xiàng)都需要單獨(dú)使用SQL去查詢。
起初 為了方便查詢數(shù)據(jù),中間視圖套用視圖,結(jié)果發(fā)現(xiàn)我嵌套了3層視圖,效率實(shí)在不敢恭維。
后來(lái) 為了提高效率,就把中間的視圖去掉,改為從表查詢數(shù)據(jù),結(jié)果每個(gè)項(xiàng)需要查詢3~4表,效率比第一次提升不少。其實(shí)查詢這種統(tǒng)計(jì)數(shù)據(jù),千萬(wàn)不能視圖套用視圖,那效率就沒(méi)的說(shuō)了。
程序?qū)崿F(xiàn),發(fā)現(xiàn)使用count(*)統(tǒng)計(jì)總數(shù)的時(shí)候,如沒(méi)有則顯示0;使用sum()統(tǒng)計(jì),則沒(méi)有不顯示,這樣我前臺(tái)頁(yè)面上有的沒(méi)有數(shù)據(jù)顯示0,有的沒(méi)有數(shù)據(jù)不顯示,不統(tǒng)一也不美觀。
改造1,在查詢數(shù)據(jù)的java端操作,不是我不想在 我的視圖中修改,我先后試驗(yàn)過(guò)decode、nvl、case甚至使用if then else 語(yǔ)句,都沒(méi)有把這個(gè)討厭的0去掉,沒(méi)有部分只好在java端進(jìn)行for循環(huán)了,這樣效率也不怎么樣,白白多了2層循環(huán),鑒于視圖寫(xiě)的比較合理,這樣的速度客戶居然能接受。
晚上睡覺(jué)就想,怎么才能把0去掉了,基本上把oracle的函數(shù)都想一遍了,甚至想自己寫(xiě)的函數(shù)實(shí)現(xiàn),后來(lái)想到replace函數(shù),結(jié)果使用成功了。
但是發(fā)現(xiàn)使用replace的效率好像沒(méi)有使用改造1的方案快?
不知各位還有沒(méi)有別的方法處理0這個(gè)問(wèn)題,歡迎大家討論一下。
posted on 2008-07-11 16:12 冷面閻羅 閱讀(5477) 評(píng)論(8) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)