【发布时间】:2018-01-25 12:06:00
【问题描述】:
由于我对 MySQL 的了解有限我无法找到合适的语法来满足我想在 MySQL 中获得的内容(MariaDB 10.0;无法将其升级到更新的版本):
上传最近 24 小时的数据(本例中:CPU_load;实际 生活它可能是一个计算重过滤,而不是像这个例子中的一个简单的last 24h);
统计过滤后满足不同条件的值。
单个查询“过去 24 小时内有多少值高于 95%?”很简单:
SELECT COUNT(*)
FROM (
SELECT *
FROM `server-statistics`
WHERE `Date_Time` >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 DAY)
) as H24
WHERE CPU_load > 95
为了解释起见,我留下了 H24 的(这里没用的)定义。
问题
如果我要依靠多个条件(即:>过去 24 小时内的 90%、过去 24 小时内 >95%、过去 24 小时内 >98% 等)与前一个查询类似,过滤后的组 H24 会一遍又一遍地重新计算。
如果它在调用之间被缓存,这不是一个真正的问题,但我更愿意一次计算多个条件下的行数。
在伪 SQL 中应该是这样的:
SELECT COUNT(*) WHERE CPU_load > 90,
COUNT(*) WHERE CPU_load > 95,
COUNT(*) WHERE CPU_load > 98
FROM `server-statistics`
WHERE `Date_Time` >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 DAY)
在纯 MySQL 中可以吗?
【问题讨论】:
-
一个值是否应该算在98%以上以及95%以上和90%以上?
-
在现实生活中,是的,但我试图理解语法这并不重要。与此同时,Susang 已经为我提供了一个工作示例。还是谢谢你。