尝试为列分配分数时接收空值

时间:2018-08-27 02:46:17

标签: mysql case mysql-workbench

我正在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

这是原始列​​中的值的图片。

Original values from the data

这里缺少什么想法?我要睡一会儿,明天再试一次,但是任何指点将不胜感激。

1 个答案:

答案 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 表达式的两种形式。