如何计算表中的正常运行时间百分比?

How would I calculate uptime percentage from my table?

提问人:Infinity 提问时间:4/3/2022 更新时间:4/3/2022 访问量:240

问:

我有一个名为的表,每十分钟执行一次ping时,它都会添加一条新记录,该表的结构可以在下面找到。server_connections

我希望计算每台服务器的正常运行时间百分比,因为根据服务器的可访问性插入了一个或字符串。诚然,我不擅长这样的高级SQL,我的极限几乎是连接!OFFLINEONLINE

+-------------+-----------------+------+-----+---------+----------------+
| 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)

关于如何做到这一点的任何建议都很棒,我已经为此绞尽脑汁了一段时间。

SQL Ping 正常运行时间 百分比

评论

0赞 Ergest Basha 4/3/2022
请添加您正在使用的 dbms、一些数据示例和预期结果。和 是不需要的pingpercentageuptime

答:

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);

这将为您提供每台服务器的每日数据。