0

我在 Mysql 5.5.29 中发现这种行为很奇怪

这两个请求应该做同样的事情,但我没有相同的结果,唯一改变的是别名:


 select count(*), CAST(pcc1 as DECIMAL(10,2)) as pcc1 from inverters.daily_data group by pcc1

结果样本:'2','1000.08''1','1000.37''1','1000.62''1','1000.83''1','10003.92''1','10005.18'


 select count(*), CAST(pcc1 as DECIMAL(10,2)) as r_pcc1 from inverters.daily_data group by r_pcc1

结果样本:'1', '198.26' '1', '247.52' '1', '258.64' '1', '266.25' '1', '274.40'

这第二个样本是绝对错误的,整个表中没有对应的值有人解释吗?


一些精度:我必须修改一个数据库,其中值存储为 varchar,但我想分析不连贯的值。我知道 CAST 没有被占用,因为它存储了确切的值,但目前我只想查看值重新分区

4

1 回答 1

0

我认为正在发生的事情是 MySQL 默认使用与指定的 GROUP BY 列匹配的非别名列名,如果找不到,则使用别名。在您的第一个示例中,它按非强制转换值分组,而在第二个示例中,它找不到名为 r_pcc1 的非别名列名,因此它改为使用别名列 r_pcc1

这个被拒绝的 MySQL 错误报告中的可能解释:-

http://bugs.mysql.com/bug.php?id=188

于 2013-06-27T10:59:30.850 回答