MySQLdb返回`Decimal`为`INT`的`sum`

这是我用来重现该问题的表定义:


create table test_sum_type 

(

  kind char(1) not null,

  n tinyint not null

);

测试数据:


+------+---+                                                                                                                                                                                                    

| kind | n |                                                                                                                                                                                                    

+------+---+                                                                                                                                                                                                    

| A    | 1 |                                                                                                                                                                                                    

| B    | 1 |                                                                                                                                                                                                    

| A    | 2 |                                                                                                                                                                                                    

+------+---+  


如您所见,Decimal当我使用时,结果列是a sum。


我已经研究了MySQLdb的源代码,只有两种字段类型设置为Decimal默认转换为:DECIMAL和NEWDECIMAL。


这可能是什么原因?有什么方法可以检查特定查询中使用的某些临时表的架构吗?


精慕HU
浏览 377回答 1
1回答

茅侃侃

这是设计使然的MySql。GROUP BY(聚合)函数SUM()和AVG()函数为精确值参数(整数或DECIMAL)返回DECIMAL值,为近似值参数(FLOAT或DOUBLE)返回DOUBLE值。(在MySQL 5.0.3之前,SUM()和AVG()对于所有数字参数都返回DOUBLE。)如果您需要返回,INT则返回CAST它。SELECT kind, CAST(SUM(n) AS SIGNED) n   FROM table1  GROUP BY kind
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python