我确实有一个表,用于存储按小时、按天计算的错误总数。
我需要计算每天错误总数的平均值,我正在尝试这样的事情:
SELECT
error_code,
AVG(total) as avg,
STDDEV_SAMP(total) as std
FROM
error_monitoring
WHERE
date_sub(curdate(), interval 30 day) <= date
GROUP BY
error_code
但是查询的结果基于表中的每小时值,而不是每日总计。
数据库中的表格如下:
id | error_code | total | average | standard_deviation | date
1 | W0334 | 2131 | 81 | 163.349 | 2016-12-20 23:00:00
2 | W0096 | 910 | 45 | 132.915 | 2016-12-20 15:00:00
3 | W0334 | 120 | 81 | 163.349 | 2016-12-20 08:00:00
那么,我如何根据每日总数来计算这个值?
最佳答案
如果你想要“按天平均”,你可以计算总数,然后除以天数:
SELECT error_code, SUM(total) / COUNT(DISTINCT date(date)) as avg
FROM error_monitoring
WHERE date_sub(curdate(), interval 30 day) <= date
GROUP BY error_code
您的代码还包含STDDEV_SAMP()
。如果您也想要该计算,那么您将需要使用子查询,按天聚合。假设每天所有错误代码均可用:
SELECT error_code, AVG(day_total), STDDEV_SAMP(day_total)
FROM (SELECT error_code, date(date) as dte, SUM(total) as day_total
FROM error_monitoring
WHERE date_sub(curdate(), interval 30 day) <= date
GROUP BY error_code, date(date)
) em
GROUP BY error_code;
关于php - 如何从mysql中按小时存储日期值的表中获取每日总计的平均值和标准偏差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41379159/