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”的比率:这是 0
和 1
之间的小数,您可以将其乘以 100
获得百分比。
我有一个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”的比率:这是 0
和 1
之间的小数,您可以将其乘以 100
获得百分比。