Mysql - 更改别名会修改结果

时间:2013-06-27 10:31:16

标签: mysql casting alias

我在Mysql 5.5.29中发现这个beahviour很奇怪

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


 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并不适用,因为它存储了确切的值,但目前我只想看看值重新分区

1 个答案:

答案 0 :(得分:0)

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

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

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