首页 > 解决方案 > 根据连接查找服务器状态查询

问题描述

我这里有这张桌子

create table servers
(
    id integer not null,
    server_name varchar not null,
    connections integer not null,
    unique(id),
    unique(server_name)
);

我想写一个查询来计算服务器状态。因此,使用id,server_namedstatus显示为我想要 2 个选项的结果OKOVERLOAD基于以下的状态:

如果服务器的连接数超过所有服务器的平均连接数,则该服务器超载。

你能帮我弄清楚如何解决这个问题吗?我尝试了很多解决方案,但找不到解决问题的最佳方法。

我是新来的查询,如果这是一个简单的问题,请原谅我。

先感谢您。

标签: sql

解决方案


这是一个带有示例的解决方案,因此它可以帮助您理解解决方案:

SELECT id,
       server_name,
       CASE
       WHEN (connections <= (SELECT AVG(connections) FROM servers)) then 'OK'
       ELSE 'OVERLOAD'
       END AS status
    FROM servers ORDER By id;

所以我在这里做的是选择 id、server_name 和一个状态,这是这个查询中的一种情况,所以如果连接数小于或等于AVG()连接数,那么这将返回OK,否则将返回OVERLOAD

例子:

ID 服务器名称 连接
1 服务器_1 3
2 服务器_2 0
3 服务器_3 6
4 server_4 3

结果如下:

ID 服务器名称 地位
1 服务器_1 好的
2 服务器_2 好的
3 服务器_3 超载
4 server_4 好的

注意这里是 server_3 超载,因为它大于 avg 是 3 (3+0+6+3)/4 = 3
希望这将帮助您弄清楚如何解决此问题。


推荐阅读