在 SQL Server 和 PostgreSQL 上查询,我如何从第一个表获得第二个表的可视化

时间:2021-08-01 20:22:42

标签: sql sql-server postgresql tsql

在 SQL Server 上查询,我如何从第一个表中获得像第二个表一样的可视化。

每行“状态”列的逻辑是:

如果特定行的连接数大于每行的平均数,则状态为“过载”,否则为“正常”。

接下来同样的逻辑使用PostgreSQL,会怎样?语法上有什么不同吗?

提供的表格:

enter image description here

预期结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用带有窗口函数的 CASE 表达式:

select id,
       server_name,
       case
         when connections > avg(connections) over() then 'Overload' 
         else 'OK'
       end as status
from the_table
order by id;

以上是 100% 标准的 ANSI SQL,不仅适用于 Postgres,也适用于 SQL Server。

答案 1 :(得分:0)

您需要一个 CASE 表达式来将 Connections 的值与您可以通过子查询获得的平均值进行比较:

SELECT *, 
       CASE 
         WHEN Connections > (SELECT AVG(1.0 * Connections) FROM tablename) 
           THEN 'Overload' 
         ELSE 'Ok' 
       END Status
FROM tablename

请注意,您应该将 Connections 的整数值乘以 1.0,因为在 SQL Server 中,如果参数是整数,则 AVG() 的结果是整数,因此您会得到一个截断的值平均值。

这在 Postgresql 中不需要,您可以删除乘法。