MySQL ELSE返回零作为正常零的十进制输入

时间:2015-08-27 16:36:22

标签: mysql

此查询有什么问题,否则返回0作为十进制0.00输入0?我尝试将玩家数据插入另一个表并立即计算玩家准确度。如果在该列中设置为零时无法计算精度。

查询:

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 ;

1 个答案:

答案 0 :(得分:1)

来自CASE表达式的official documentation

  

CASE表达式的返回类型是所有返回值的兼容聚合类型

表示CASE的类型始终与所有可能的值兼容。 ROUND返回小数,因此CASE也会这样做。

我不知道你在期待什么。无论数据是什么,查询结果都必须具有固定类型