Mysql 对带有负数的枚举列使用SUM()

Mysql 对带有负数的枚举列使用SUM(),mysql,sql,Mysql,Sql,我想将“voteValue”列中的值限制为-1或1,因此为此使用了枚举数据类型。然而,当我试图计算选票的总价值(即+1票和-1票)时,我得到的结果是每-1票得到+2票,而不是减法 我知道我可以把它分成两个不同的SQL代码,分别得到+1和-1投票的总和,但我希望我的代码尽可能简单 有什么想法吗?总和不应用于枚举。在内部,它们使用整数值。但是你不应该用它来计算这些数字。 您可以通过对enum列进行分组,并在其他列上使用count()来获取每个enum的投票数 请参见以下场景 CREATE TABLE

我想将“voteValue”列中的值限制为-1或1,因此为此使用了枚举数据类型。然而,当我试图计算选票的总价值(即+1票和-1票)时,我得到的结果是每-1票得到+2票,而不是减法

我知道我可以把它分成两个不同的SQL代码,分别得到+1和-1投票的总和,但我希望我的代码尽可能简单


有什么想法吗?

总和不应用于枚举。在内部,它们使用整数值。但是你不应该用它来计算这些数字。 您可以通过
enum
列进行分组,并在其他列上使用
count()
来获取每个enum的投票数

请参见以下场景

CREATE TABLE `votes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` int(11) NOT NULL,
  `vote` enum('PARTY_2','PARTY_1','PARTY_9') DEFAULT NULL,
  PRIMARY KEY (`user`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

insert into votes( user, vote) values( 1, 2), (2, 3), (4,3), (3, 1), (6,1), (5,2), (8, 2), (9,3);

SELECT vote `Party`, count(id) as `Votes`  FROM votes group by `vote`;
输出
我想如果你想让两个都在同一行,你需要一个案例陈述。像这样的东西应该有用


我认为您最好将投票表示为可为空的位/布尔类型(您可以使用相同的技术进行查询)

您正在捕获的是/否类型的情况吗?
+---------+-------+
| Party   | Votes |
+---------+-------+
| PARTY_2 |     2 |
| PARTY_1 |     3 |
| PARTY_9 |     3 |
+---------+-------+
select sum(case when voteValue = 1 then 1 else 0 end) as positiveVoteTotal,
           sum(case when voteValue = -1 then 1 else 0 end) as negativeVoteTotal
from leTable