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