下面的函数总是返回ELSE值(即6),即使SELECT查询本身返回值30.00(例如)。在这种情况下,函数应该返回4。有人能帮我吗?
DELIMITER $$
CREATE FUNCTION znamka(id_testu INT, id_studenta INT)
RETURNS TINYINT
BEGIN
DECLARE percenta FLOAT;
SET percenta=
(
SELECT ROUND(tv.pocet_bodov/t.max_body*100, 2)
FROM test t JOIN test_vysledky tv ON (tv.fk_test=t.id_test)
WHERE tv.fk_test=id_testu AND tv.fk_student=id_studenta
);
RETURN CASE
WHEN percenta>=90 THEN 1
WHEN percenta<90 >=75 THEN 2
WHEN percenta<75 >=50 THEN 3
WHEN percenta<50 >=30 THEN 4
WHEN percenta<30 THEN 5
ELSE 6
END;
END;
$$
DELIMITER ;
最佳答案
将CASE
语句改为:
RETURN CASE
WHEN percenta >= 90 THEN 1
WHEN (percenta < 90 AND percenta >=75) THEN 2
WHEN (percenta < 75 AND percenta >=50) THEN 3
WHEN (percenta < 50 AND percenta >=30) THEN 4
WHEN percenta < 30 THEN 5
ELSE 6
END;
评论:
正如@Drew在他的评论中提到的,你永远不会达到你的
ELSE
状态。另外,我很惊讶MySQL在执行这个函数时没有任何错误。