先贴出一段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 加上也不错保险 毕竟值不会为空了