我正在研究一些趋势/分析工具,并希望在事件MySQL数据库中查询每小时事件指标,以便我可以将该指标作为石墨中的数据点发送出去。由于某些事件将位于状态表中,而其他事件将位于历史记录表中,因此我想出了我正在寻找的基本查询。请记住,我绝不是DBA,我想学习如何从两个表中获取总数。这是我到目前为止所拥有的:
mysql> SELECT COUNT(*) FROM events.history WHERE firstTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR)) AND (severity='5' OR severity='3')
-> UNION
-> SELECT COUNT(*) FROM events.status WHERE firstTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR)) AND (severity='5' OR severity='3')
-> ;
+----------+
| COUNT(*) |
+----------+
| 27 |
| 267 |
+----------+
2 rows in set (0.00 sec)
mysql>
我希望修改 SQL 以返回一行,并添加两个表中的计数,因此在示例中它将是 294。有人告诉我,我可以通过联接来完成此操作,但我似乎在拨入语法时遇到了一些麻烦。
将联合放在子查询中,然后使用 SUM()
将它们相加。
SELECT SUM(c) total
FROM (SELECT COUNT(*) c FROM events.history WHERE firstTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR)) AND (severity='5' OR severity='3')
UNION
SELECT COUNT(*) c FROM events.status WHERE firstTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR)) AND (severity='5' OR severity='3')
) u