此查询有什么问题,否则返回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 ;
答案 0 :(得分:1)
来自CASE
表达式的official documentation:
CASE表达式的返回类型是所有返回值的兼容聚合类型
表示CASE
的类型始终与所有可能的值兼容。 ROUND
返回小数,因此CASE
也会这样做。
我不知道你在期待什么。无论数据是什么,查询结果都必须具有固定类型。