我的数据库中有一个非常简单的评分系统,其中每个评分都存储为枚举('1','-1')。要计算使用此语句尝试的总数:
SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1
这对于正数1很好用,但是由于某种原因,-1被解析为2。
任何人都可以提供帮助或提供煽动性吗?
或者我应该放弃并将列更改为SIGNED INT(1)?
是,我建议更改列的类型。当您阅读doc about enum type(强烈建议不要使用数字作为枚举值!)时,该问题变得很明显-返回枚举项的索引,而不是枚举值本身。
这就是您想要的
select enum+0 as enum
仅可在MySQL中将int
转换为enum
:
CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
好,
仅仅花了一点时间。我了解到我不应该使用ENUMs,其中整数是值。但是,我们有多年的数据价值,我无法更改数据库。
这个坏男孩工作了(将其转换为字符,然后转换为带符号的整数)。
CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
使用
SELECT SUM( IF( columnname >0, CAST( columnname AS CHAR ) , NULL ) ) AS vals
FROM `tableName`
我也不会在这里使用枚举,但是在这种情况下仍然有可能获得所需的内容
创建表:
CREATE TABLE test (
_id INT PRIMARY KEY,
rating ENUM('1', '-1')
);
填充表:
INSERT INTO test VALUES(1, "1"), (2, "1"), (3, "-1"), (4, "-1"), (5, "-1");
对枚举执行数学运算会将它们转换为索引,因此仅可以缩放结果值:
SELECT
SUM(3 - rating * 2)
FROM
test;
结果:-1
对于测试用例是正确的。