在 SQL Server 上查询,我如何从第一个表中获得像第二个表一样的可视化。
每行“状态”列的逻辑是:
如果特定行的连接数大于每行的平均数,则状态为“过载”,否则为“正常”。
接下来同样的逻辑使用PostgreSQL,会怎样?语法上有什么不同吗?
提供的表格:
预期结果:
答案 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 中不需要,您可以删除乘法。