Использование SUM () для столбца ENUM с отрицательными числами - PullRequest
2 голосов
/ 12 февраля 2012

Я хочу ограничить значение в столбце "voiceValue" значением -1 или 1, поэтому для этого я использовал тип данных ENUM. Однако, когда я пытаюсь подсчитать общую сумму голосов (то есть +1 голос и -1 голос), я получаю +2 за каждый голос -1 вместо вычитания.

Я знаю, что могу просто разделить это на 2 разных кода SQL, чтобы получить СУМС от +1 и -1 голосов раздельно, но я хочу, чтобы мой код был максимально простым.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Я думаю, что если вы хотите, чтобы оба были в одной строке, вам понадобится оператор CASE.Примерно так: должно работать

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

Я думаю, вам лучше представить голос в виде обнуляемого бита / логического типа (вы можете использовать тот же метод для запроса)

1 голос
/ 12 февраля 2012

СУММА не должна использоваться на ENUM. Внутренне они используют целочисленные значения. Но вы не должны использовать его для подсчета этих чисел. Вы можете group by столбец enum и использовать count() в других столбцах, чтобы получить количество отданных голосов за перечисление.

См. Следующий сценарий.

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 |
+---------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...