我的数据库中有一个非常简单的评级系统,其中每个评级都存储为枚举('1',' - 1')。要计算我尝试使用此语句的总数:
SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1
这适用于正1,但由于某种原因,-1被解析为2。
任何人都可以提供帮助或提供煽动吗?
或者我应该放弃并将列更改为SIGNED INT(1)?
答案 0 :(得分:16)
这就是你想要的
select enum+0 as enum
答案 1 :(得分:12)
只能在MySQL中int
转换为enum
:
CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
答案 2 :(得分:4)
是的,我建议更改列的类型。当您阅读doc about enum type(强烈建议不要使用数字作为枚举值!)时,问题就变得清晰了 - 返回枚举项的索引,而不是枚举值本身。
答案 3 :(得分:0)
使用
SELECT SUM( IF( columnname >0, CAST( columnname AS CHAR ) , NULL ) ) AS vals
FROM `tableName`
答案 4 :(得分:0)
好的,
只是有一点时间与这一个。我了解到我不应该使用整数是值的ENUM。但是我们有多年的数据,我无法改变数据库。
这个坏男孩工作(把它变成一个角色,然后变成一个签名的int)。
CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1
答案 5 :(得分:0)
我也不会在这里使用枚举,但是在这种情况下仍然有可能获得所需的内容
创建表格:
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
对测试用例是正确的。