MySQL按时间分组基于measure_name列计算成功率的实现方法
解决方案
你可以通过条件聚合实现该需求,按time字段分组后,分别提取每组内的总请求量和成功请求量计算即可。
示例SQL
SELECT `time`, ROUND( (SUM(IF(measure_name = 'successVolume', `measure_value::bigint`, 0)) * 1.0 / NULLIF(SUM(IF(measure_name = 'volume', `measure_value::bigint`, 0)), 0)) * 100, 1 ) AS successRate FROM 替换为你的实际表名 GROUP BY `time` -- 如果只需要返回成功率为100%的记录,可打开下面的注释 -- HAVING successRate = 100.0 ;
说明
- 使用
IF(或CASE WHEN)做条件判断,分别汇总同一时间下的成功量和总请求量 - 乘以
1.0是为了避免MySQL整数除法导致小数位丢失 NULLIF用来处理总请求量为0的场景,避免除零报错ROUND(...,1)用于控制输出保留1位小数,和你预期的输出格式匹配,可按需调整小数位数
内容的提问来源于stack exchange,提问作者Robin S.
相关产品推荐
相关产品推荐

