如何在查询中进行数学运算?

时间:2014-01-11 14:14:35

标签: mysql sql database query-optimization

我的查询如下:

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添加到SUM,则不添加)结果是同一记录中的值。这可能不进行子查询吗?我不希望有复杂的未优化查询。

2 个答案:

答案 0 :(得分:0)

在SUM函数中使用CASE语句。

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

答案 1 :(得分: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;

您也可以将其表达为案例陈述,例如:

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