MySQL的新手。.so请帮助我使用此基本代码。 我有一个类似这样的查询...
reviewYear
并给出正确的结果-here
但是我想在case when语句之后使用sum,以便我可以得到BO = 1并按年份分组的总值,所以我进行了以下更改-
select weekofyear(id_time),
(id),
@Tat1:=exp1,
@Tat2:=exp2,
@check1:=exp3,
@check2:=exp4,
(case when @check2=0 then
(case when (@Tat1>(@Tat2+30) or (@check1=1 and (@Tat1>@Tat2+10))) then 1 else 0 end)
else
(case when (@Tat1>(@Tat2+30) or (@check1=1 and (@Tat1>@Tat2+20))) then 1 else 0 end)
end) as BO
from datb
where cid=18
and id_time between '2019-11-01 06:00:00' and '2019-11-25 06:00:00'
,但始终返回0作为输出。 输出-这里2
请帮助,我不知道我在做什么错。
感谢!
答案 0 :(得分:0)
正如其他人已经说过的那样,会话变量可能是不可预测的(尤其是当聚合混入时)。就是说,您似乎并没有使用会话变量将值从一行转移到另一行(通常这样做),而是只是为不需要重复的计算创建别名。
一种更好的处理方式就是通过子查询。
SELECT woy, id, Tat1, Tat2, check1, check2
, CASE
WHEN check2=0 THEN (
CASE
WHEN (Tat1>(Tat2+30) OR (check1=1 AND (Tat1>Tat2+10))) THEN 1
ELSE 0
END
)
ELSE (
CASE WHEN (Tat1>(Tat2+30) OR (check1=1 AND (Tat1>Tat2+20))) THEN 1
ELSE 0
END
)
END AS BO
FROM (
SELECT WEEKOFYEAR(id_time) AS woy
, id
, exp1 AS Tat1
, exp2 AS Tat2
, exp3 AS check1
, exp4 AS check2
FROM datb
WHERE cid=18
AND id_time BETWEEN '2019-11-01 06:00:00' AND '2019-11-25 06:00:00'
) AS subQ
;
然后您可以调整上面的查询以进行聚合,或者将其用作聚合外部查询的子查询。