我正在MySQL Workbench
中开发一个计分系统,并且在大多数情况下,它进展顺利。即使原始数据不包含任何空值,也有一栏给我带来麻烦,并一直导致空值。这是我用来获取列的查询。
SELECT
(CASE days_in_current_status
WHEN days_in_current_status < 1000 THEN 0.33 * 20
WHEN days_in_current_status BETWEEN 1000 and 2000 THEN 0.66 * 20
WHEN days_in_current_status > 2000 THEN 1 * 20
END) AS DI_score
FROM
issues
这是原始列中的值的图片。
这里缺少什么想法?我要睡一会儿,明天再试一次,但是任何指点将不胜感激。
答案 0 :(得分:0)
问题在于您编写CASE
表达式的方式。以您编写的形式,它会将days_in_current_status
的值与days_in_current_status < 1000
(或其他逻辑表达式之一)的值进行比较,在MySQL中该值将为1 (true)
或0 (false)
。结果,CASE
的所有分支都不匹配(除非days_in_current_status
恰好是1或0),并且由于您没有ELSE
子句,因此结果为{{1} }。如果您按照以下方式重写NULL
表达式,则它应该可以正常工作。
CASE
请参见manual,以讨论(CASE
WHEN days_in_current_status < 1000 THEN 0.33 * 20
WHEN days_in_current_status BETWEEN 1000 and 2000 THEN 0.66 * 20
WHEN days_in_current_status > 2000 THEN 1 * 20
END) AS DI_score
表达式的两种形式。