You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL问题求助:查询与建筑平均高度差值小于100米的建筑名称

解决方案

你的SQL语句无法运行主要有两个问题:

  1. 聚合函数不能直接用在WHERE子句:AVG(Height)是聚合函数,它是对整个表的行计算结果,而WHERE子句是在聚合前做行级过滤,语法上不允许直接使用聚合函数作为过滤条件。
  2. 范围逻辑错误:你写的BETWEEN ABS(AVG(Height)-100) AND ABS(AVG(Height))完全不符合“与平均高度差值小于100米”的需求,正确的范围应该是平均高度减100到平均高度加100。

下面提供两种可行的解决方法:

方法一:使用子查询预先计算平均高度

这是兼容性最好的写法,几乎所有SQL数据库都支持:

SELECT Name
FROM building
WHERE ABS(Height - (SELECT AVG(Height) FROM building)) < 100;

或者用BETWEEN写法(效果和上面一致):

SELECT Name
FROM building
WHERE Height BETWEEN (SELECT AVG(Height) FROM building) - 100
                  AND (SELECT AVG(Height) FROM building) + 100;

方法二:使用窗口函数(适合支持窗口函数的数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用这种方式,还能方便扩展显示平均高度:

SELECT Name
FROM (
    SELECT 
        Name, 
        Height, 
        AVG(Height) OVER () AS avg_building_height
    FROM building
) AS building_with_avg
WHERE ABS(Height - avg_building_height) < 100;

内容的提问来源于stack exchange,提问作者user20513289

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:30:50