2015-08-27 1 views
0

Что не так в этом запросе, иначе возвращает ноль в виде десятичной дроби 0.00 ед. 0? Я пытаюсь вставить данные игрока в другую таблицу и сразу вычислить точность игрока. Если точность вычислений невозможна при установке нуля в этом столбце.MySQL ELSE возвращает ноль в качестве десятичного момента нормального нуля

Запрос:

INSERT INTO player_tmp (id, name, accuracy) 
SELECT player.id, player.name, 
CASE 
    WHEN hit0 > 0 AND fired0 > 0 THEN ROUND(hit0/fired0,2) 
    ELSE 0 
END AS accuracy FROM player INNER JOIN weapons ON player.id = weapons.id ORDER BY weapons.kills0 DESC, accuracy DESC 

назначение стол:

CREATE TABLE IF NOT EXISTS `player_tmp` (
    `pos` mediumint(6) unsigned NOT NULL AUTO_INCREMENT, 
    `id` int(8) unsigned NOT NULL DEFAULT '0', 
    `name` varchar(23) NOT NULL DEFAULT '', 
    `accuracy` varchar(13) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`pos`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
+0

В чем проблема с этим типом? (Надеюсь, вы не делаете что-то вроде 'value == '0" 'в коде.) Если точность всегда будет числовой, почему бы не определить ее как таковую? Если вы этого не сделаете, у вас будет еще больше головных болей по линии (когда сортировка дает этот порядок «1,11,12,2,20,23,3' ....) – Uueerdo

ответ

1

Из official documentation из CASE выражения:

Возвращаемый типа выражения случае является совместимым агрегированным типом всех возвращаемых значений

Значение CASE всегда совместимо с Возможные значения. ROUND возвращает десятичную величину, поэтому CASE делает это тоже.

Я не знаю, чего вы ожидали. Результаты запроса должны иметь фиксированный тип, независимо от того, что данные.

+0

следует использовать нуль как строку '0 '? Тогда работаю так, как хочу. –

+0

@ user3801788, который может работать, или сделать то, что вы делаете яснее, вы можете «CAST» как «CHAR» – Uueerdo

Смежные вопросы