MySQL 每小时百分比

MySQL Percentage per hour

我有一个MySQLtable如下:

到目前为止我得到的成功率如下:

SELECT endDate AS TIME
        ,count(*) * 100.0 / (
            SELECT count(*)
            FROM test_result
            WHERE endDate BETWEEN FROM_UNIXTIME(1603947600)
                    AND FROM_UNIXTIME(1604006628)
                AND testResult IN (
                    "SUCCESS"
                    ,"FAILURE"
                    )
            ) AS "Percent"
    FROM test_result
    WHERE endDate BETWEEN FROM_UNIXTIME(1603947600)
            AND FROM_UNIXTIME(1604006628)
        AND testResult = "SUCCESS"
    GROUP BY 1
        ,testResult

但我的任务是将其制作成图表,显示全天(每小时)的百分比变化。

这是我最近的失败尝试:

SELECT count(*) AS Count
        ,CONCAT (
            month(endDate)
            ,'-'
            ,day(endDate)
            ,'-'
            ,hour(endDate)
            ) AS hour
        ,testResult
    FROM test_result
    WHERE testResult IN (
            'SUCCESS'
            ,'FAILURE'
            )
    GROUP BY testResult
        ,hour
    ORDER BY hour

有什么提示吗?

改为使用条件聚合:

SELECT endDate as time,
       AVG(CASE WHEN testResult = 'SUCCESS' THEN 100.0 ELSE 0 END)
FROM test_result
WHERE endDate BETWEEN FROM_UNIXTIME(1603947600) AND FROM_UNIXTIME(1604006628) AND
      testResult IN ('SUCCESS', 'FAILURE')
GROUP BY 1

如果你想要endDate每小时的成功率,那么你可以这样做:

select
    date_format(endDate, '%Y-%m-%d %H:00:00') endHour,
    avg(testResult = 'FAILURE') failure_ratio
from test_result
where testResult in ('SUCCESS', 'FAILURE')
group by endHour
order by endHour

date_format() 表达式将 endDate 截断为小时:您可以使用该信息进行汇总。另一方面,avg() 计算 testResult 中“FAILURE”的比率:这是 01 之间的小数,您可以将其乘以 100获得百分比。