2014-10-20 77 views
0

我有以下形式的查詢:優化SQL查詢給定的條件

select SUM(some_column) from (table) 

where 

IF x then a 

ELSE y then b 

ELSE z then c 

... 

現在在我的Java代碼中,我稱這種查詢每一個不同的值(X,Y,Z,...),它返回我需要sum.My目的是計算總和所有這些值,即

Total = SUM_for_x + SUM_for_y + SUM_for_z + .... 

現在,關當然,我打的DB每一個這樣的價值,這是costly.Can我在1個單個查詢中優化了這一點,它爲我完成了這項工作,只敲了一次數據庫?

回答

0

假設你只總和的部分和興趣,而不是和條件是互斥的,你可以這樣做:

SELECT SUM(some_column) 
    FROM (table) 
WHERE (a) 
    OR (b) 
    OR (c) 
    OR ... 

的另一種方式(如果你的條件並不相互排斥)將是:

SELECT SUM(some_column) 
    FROM(SELECT SUM(some_column) AS some_column FROM (table) WHERE (a) UNION ALL 
     SELECT SUM(some_column) AS some_column FROM (table) WHERE (b) UNION ALL 
     SELECT SUM(some_column) AS some_column FROM (table) WHERE (c) -- UNION ALL a.s.o. 
    ) 
+0

這兩者在性能上有差異嗎? – 2014-10-20 10:32:55

0
SELECT SUM(case when x then a end) sum_a, 
     SUM(case when y then b end) sum_b, 
     SUM(case when z then c end) sum_c 
    FROM <table> 

,並在Java中

或GE總結t total in SQL:

SELECT SUM(case when x then a end) sum_a + 
     SUM(case when y then b end) sum_b + 
     SUM(case when z then c end) sum_c 
    FROM <table>