SQL问题:如何筛选平均体重小于70的省份及对应平均体重
SQL查询问题:筛选平均体重小于70的省份
问题根源
你用WHERE子句过滤分组后的平均体重是错误的:
WHERE是在分组前对单条数据做筛选,根本识别不了分组后才生成的Avg_Weight别名,也没法直接用聚合函数作为筛选条件。所以原语句里的WHERE "Avg_Weight" < 70等于没生效,自然返回了所有省份的结果。
正确写法
改用HAVING子句,它专门用于在分组后过滤分组结果:
SELECT province, AVG(weight) AS "Avg_Weight" FROM people GROUP BY province HAVING AVG(weight) < 70;
部分数据库(如MySQL、PostgreSQL)也支持直接使用别名筛选:
SELECT province, AVG(weight) AS "Avg_Weight" FROM people GROUP BY province HAVING "Avg_Weight" < 70;
效果说明
先按province分组计算每个省份的平均体重,再通过HAVING筛选出平均体重小于70的分组,最终只会返回Opole和对应的平均体重45。
内容的提问来源于stack exchange,提问作者Enzo Austin
相关产品推荐
相关产品推荐

