繁体   English   中英

MySQLdb返回十进制为INT的总和

[英]MySQLdb return `Decimal` for a `sum` of `INT`

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

create table test_sum_type 
(
  kind char(1) not null,
  n tinyint not null
);

测试数据:

+------+---+                                                                                                                                                                                                    
| kind | n |                                                                                                                                                                                                    
+------+---+                                                                                                                                                                                                    
| A    | 1 |                                                                                                                                                                                                    
| B    | 1 |                                                                                                                                                                                                    
| A    | 2 |                                                                                                                                                                                                    
+------+---+  

使用MySQLdb查询:

In [32]: cur.execute("select kind, sum(n) from test_sum_type group by kind")                                                                                                                                    
Out[32]: 2L                                                                                                                                                                                                     

In [33]: cur.fetchall()                                                                                                                                                                                         
Out[33]: (('A', Decimal('3')), ('B', Decimal('1')))                                                                                                                                                             

In [34]: cur.execute("select kind, n from test_sum_type")                                                                                                                                                       
Out[34]: 3L                                                                                                                                                                                                     

In [35]: cur.fetchall()                                                                                                                                                                                         
Out[35]: (('A', 1), ('B', 1), ('A', 2))  

如您所见,当我使用sum时,结果Decimal

我已经研究了MySQLdb的源代码,默认情况下只有两种字段类型设置为转换为DecimalDECIMALNEWDECIMAL

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

这是在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

这是SQLFiddle演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM