Mysql 对数据统计百分比的四舍五入

来源:互联网 发布:显卡降频软件 编辑:程序博客网 时间:2024/06/12 10:32

                     先贴出一段sql例子    可以看得出来这里统计的是  t 表 和 t1表 一月份到12 月份 的 总数     就是t 表的总数  除以 t1 表的总数   


SELECT  
        IFNULL(CONCAT(ROUND((LEFT(t.tsum/t1.t1sum*100,6)),2),'%'),0) as auditi_than  
        from  
        (SELECT COUNT(0) as tsum from t_sqwg t  where 1=1   
           and t.time BETWEEN '2017-01-01' and '2017-12-29'  
        )t,  
        (select count(0) as t1sum from t_sqwg_log t where 1=1   
           and t.date BETWEEN '2017-01-01' and '2017-12-29'  
    ) t1
              
最后的结果就是这样的 




  以上的sql 也用到了 mysql 的四种函数 也就是 IFNUll ,CONCAT, ROUND,LEFT 


先来看看括号最里面的LEFT


LEFT(t.tsum/t1.t1sum*100,6)如果 t表比上t1保留小数点两位 的结果为 463.5523


那 select left(463.5523,6)  >> 463.55 


   select left(463.5523,5)  >> 463.5  


 
再看LEFT 后面的ROUND 函数 也就是MYSQL 的四舍五入函数 它有两种形式


   ROUND(values,x)  values是要处理的数 x 是指保留几位小数点  但是 x 也可以为负数   当为负数时小数点左边的 x位整数为0 同时小数都为0 


ROUND(values)  其实就是ROUND(values,0) 默认x 为0


列子  
  
SELECT ROUND(4578.45785, 2 ) 
>>> 4578.46  
 
SELECT ROUND(4578.45785, 3)
>>> 4578.458 
 
SELECT ROUND(4578.45785, -1 )
>>> 4570


SELECT ROUND(4578.45785, -2) 
>>> 4500
所以 以上sql 就是
ROUND((LEFT(t.tsum/t1.t1sum*100,6)),2) <的结果为 463.55>  


然后 再用函数CONCAT 把 结果和 百分号 %  CONCAT(ROUND((LEFT(t.tsum/t1.t1sum*100,6)),2),'%')  


>>>463.55%


最后在来个IFNULL  函数  这里放的作用就是 如果值为NULL  就为0    当然也可以为其他数字或者为字符串值  取决它被使用的上下文  
 
这里使用的LEFT 不用也没关系   现在这里用到是因为业务需要这样  IFNULL 加上也不错保险 毕竟值不会为空了   

原创粉丝点击