2014-10-20 78 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>