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

Mysql 尝试为列分配分数时接收空值,mysql,case,mysql-workbench,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.6

我正在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
选择
(案例天数处于当前状态)
当处于当前状态的天数<1000时,则为0.33*20
当当前状态的天数介于1000和2000之间时,则为0.66*20
当当前状态的天数>2000时,则为1*20
结束)作为DI_分数
从…起
问题
下面是原始列中的值的图片


对这里缺少的东西有什么想法吗?我正要睡一会儿,明天再试一次,但如果有任何提示,我将不胜感激。

问题在于您编写
案例的方式。在您编写的表单中,它将当前状态下的
days\u值与当前状态下的<1000
(或其他逻辑表达式之一)下的
days\u值进行比较,MySQL中的
1(true)
0(false)
。因此,
案例
的任何分支都不会匹配(除非当前状态下的
恰好为1或0),并且由于您没有
ELSE
子句,因此结果为
NULL
。如果您将
大小写
表达式重写为如下所示,则应能正常工作

(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
(案例)
当处于当前状态的天数<1000时,则为0.33*20
当当前状态的天数介于1000和2000之间时,则为0.66*20
当当前状态的天数>2000时,则为1*20
结束)作为DI_分数

有关
CASE
表达式的两种形式的讨论,请参阅。

days\u处于当前状态的列类型是什么?Hi Hassan,这没有回答您的问题吗?如果没有,你能提供更多的信息来帮助回答吗?