2014-01-11 66 views
0

我有一個查詢如下:如何在查詢中進行數學運算?

SELECT u.username, u.id, COUNT(t.tahmin) AS tahmins_no, 
     SUM(t.result = 1) AS winnings, 
    SUM(t.result = 2) AS loses, 
     (SUM(t.tahmin = 1)*1) AS ms1, 
     (SUM(t.tahmin = 2)*3) AS ms0, 
     (SUM(t.tahmin = 3)*1) AS ms2 
FROM users u 
LEFT JOIN tahminler t ON u.id = t.user_id 

GROUP BY u.id 
HAVING tahmins_no > 0 

我想讓(SUM(t.tahmin = 1)*1) AS ms1只有result = 1(如果結果爲1個加總結否則不加),結果是在相同的記錄中的值來計算。這有可能沒有進行子查詢?我不希望有複雜的未優化的查詢。

+0

你沒有得到你所期望的結果?您使用的語法在MySQL中有效。 –

回答

0

這是你想要的嗎?

SELECT u.username, u.id, COUNT(t.tahmin) AS tahmins_no, 
     SUM(t.result = 1) AS winnings, 
     SUM(t.result = 2) AS loses, 
     (SUM((t.tahmin = 1)*(t.result = 1))*1) AS ms1, 
     (SUM((t.tahmin = 2)*(t.result = 1))*3) AS ms0, 
     (SUM((t.tahmin = 3)*(t.result = 1))*1) AS ms2 
FROM users u LEFT JOIN 
    tahminler t 
    ON u.id = t.user_id 
GROUP BY u.id 
HAVING tahmins_no > 0; 

你也可以表達這種case語句,例如:

sum(case when t.tahmin = 1 and t.result = 1 then 1 else 0 end) * 1 as ms1 
+0

這正是我所需要的。十分感謝 。只是一個小問題,有沒有一種可能的方式來彙總所有的值? – Basel

+0

@Basel。 。 。我不知道你的意思,「把所有的價值總結在一起」。使用'sum()','+'或這兩者的組合。 –

+0

我的意思是所有的總和可以像(ms1 + ms2 + .... + kg_yok)我可以聚合函數的結果在一起嗎? – Basel

0

在SUM函數中使用CASE語句。

SUM(CASE When t.Result=1 Then t.tahmin Else 0 end) As ms1

+0

語法SUM(t.tahmin = 1)在MySQL中是有效的,因爲表達式的結果是'TRUE',它是'1',並且等同於'SUM(CASE WHEN t.tahmin = 1 THEN 1 ELSE 0 END )' –

+0

@ Michael Berkowski說得對。我想根據結果值計算而不是tahmin值。 – Basel

+0

@mhasan在我的問題中有一個乘法運算。它就像一個重量,所以我也應該使用它。我可以或不可以? 也t,塔明不總是1它也可能是2或3 – Basel

相關問題