Mysql中关于聚合函数sum()最新的认识

最近开发后台接口的时候,需要做一个统计查询,使用到sum()函数,数据库中的表是以前已经设计好的,并且要进行统计查询的那张表在其他一些接口中已经使用,mysql的版本是5.5.28,这是背景。


当写接口写sql语句时,才发现需要用sum()函数统计的那个字段在表中设计好的数据类型是varchar类型,由于对聚合函数sum()认识不深,本以为直接统计会报错,语句如下:

SELECT SUM(file_size) FROM res_material


但运行正常,上网搜索时看到了这么一句话“如果varchar类型中存放的都是数字,需要看是什么数据库,如果是sqlserver那么可将字符转成数字再进行sum,如果是oracle,则可隐形转换成数字,无需修改语句”。虽然没有搜索到关于mysql中sum()函数也有隐形转化的特点,但我使用的是Mysql,如上文所示我没有在语句中加上cast()转换类型的函数,运行结果依然正确,这应该能够说明在mysql中的sum()函数与oracle一样也有隐形转化的特点(还需要学习)。


另外,经过测试,如果统计字段中有的值不是数字,那么也不会报错,sum()函数只统计数字行。


且当语句加上cast()函数时,统计结果依然正确:

SELECT SUM(CAST(file_size AS DECIMAL(10,2))) AS file_size FROM res_material


补充一点:MySql sum(A+B)和sum(A)+sum(B)的区别 :

1.如果字段A和字段B的值都不为NULL,则以上两种情况一样

2.如果其中有一个字段的值为NULL则sum(A+B)的值为NULL


学习中,如有不正确或不准确的地方,请多指正,谢谢

你可能感兴趣的:(java,mysql)