提问人:Infinity 提问时间:4/3/2022 更新时间:4/3/2022 访问量:240
如何计算表中的正常运行时间百分比?
How would I calculate uptime percentage from my table?
问:
我有一个名为的表,每十分钟执行一次ping时,它都会添加一条新记录,该表的结构可以在下面找到。server_connections
我希望计算每台服务器的正常运行时间百分比,因为根据服务器的可访问性插入了一个或字符串。诚然,我不擅长这样的高级SQL,我的极限几乎是连接!OFFLINE
ONLINE
+-------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| server_id | bigint unsigned | NO | | NULL | |
| status | varchar(255) | NO | | NULL | |
| map_name | varchar(255) | YES | | NULL | |
| num_players | int | YES | | NULL | |
| max_players | int | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+-------------+-----------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
关于如何做到这一点的任何建议都很棒,我已经为此绞尽脑汁了一段时间。
答:
1赞
user18098820
4/3/2022
#1
如果要所有连接的百分比,请使用:
SELECT
(100 * COUNT(status)) /
COUNT(CASE WHEN status = 'ONLINE' THEN 1
ELSE 0 END AS percentage_uptime
FROM server_connections;
您可能希望更具体并按以下方式分组
- 日期或时间
- server_id或map_name 例如,根据您可能使用的 rdbms:
SELECT
server_id,
DAY(created_at) AS "Day",
(100 * COUNT(status)) /
COUNT(CASE WHEN status = 'ONLINE' THEN 1
ELSE 0 END AS percentage_uptime
FROM server_connections
GROUP BY
server_id,
DAY(created_at);
这将为您提供每台服务器的每日数据。
评论
ping
percentage
uptime