现有一张日志表,需要查询表中调用接口结果统计,表与本文相关的两个字段是接口名称以及调用结果。
表的相关数据如下图
*注:code为10000代表成功,其余均是失败
最终所查询的结果如下图:
记录一下整个思路:
第一步是根据接口名称以及code码分组查询,代码如下
SELECT
interface_name type,
code,
count( 0 ) count
FROM `upload_logs`
GROUP BY
interface_name,
code
然后就得到了如下结果:
第二步是需要将成功与失败的区分,这里失败的还需要用到sum来进行求和,还有就是要将成功与失败的作为列来展示,这一点比较关键,用到行专列的相关知识点,相关的在网上都能查的到,我就不赘述了,代码实现如下:
SELECT
type,
sum(IF( code != '10000', count, 0 )) error,
sum(IF( code = '10000', count, 0 )) success
FROM
(
SELECT
interface_name type,
code,
count( 0 ) count
FROM
`upload_logs`
GROUP BY
interface_name,
code
) a
GROUP BY
type
其实就是将第一步的查询结果做进一步处理,后续都是这种思想。
第三步就是将成功率计算出来,这个就简单了,只不过需要在第二步的基础上,sql如下
SELECT
type,
error,
success
,ROUND( IFNULL( success /( error + success ), 0 ), 4 ) rate
FROM
(
SELECT
type,
sum(IF( code != '10000', count, 0 )) error,
sum(IF( code = '10000', count, 0 )) success
FROM
(
SELECT
interface_name type,
code,
count( 0 ) count
FROM
`upload_logs`
GROUP BY
interface_name,
code
) a
GROUP BY
type
) b
最后就会得到开篇的结果