2013-07-31 61 views
0
select *, 
    (a/100) as a_calc, 
    (select sum(a_calc) from foo where c = ? and d = ?) as a_calc_sum 
from foo 
where c = ? and d = ? 
order by a; 

這裏的目的是我想回到匹配原來的查詢(不和)的所有行,並已mysql的計算a_calc的總和我不是發出一個單獨的查詢。沒有這個子選擇,看起來我只能得到查詢中的第一行,並附加了正確的總和。減少SQL語句的結果山坳的總和

任何想法如何減少上面的查詢?

+1

你想要的所有匹配行作爲在結果列的總和? 「減少查詢」是什麼意思? – Vatev

+0

這太抽象了,無法獲得體面的答案。請在http://sqlfiddle.com上提供示例模式,並在您的問題中顯示應用於測試模式時查詢的預期結果。 –

+0

通過減少我的意思,我想盡可能簡化SQL查詢,包括可能分解重複的'where'子句。 – stgtscc

回答

0

我想你想避免運行子查詢的每一行 - 這裏是如何:

select *, 
    a/100 as a_calc, 
    a_calc_sum 
from foo 
join (select sum(a/100) a_calc_sum from foo where c = ? and d = ?) x 
where c = ? and d = ? 
order by a;