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

求助:该SQL子查询存在什么问题?语句错误排查

问题分析与解决

先看你给出的SQL语句:

SELECT name, countrycode, population, avg(population)
FROM city
WHERE population > (SELECT avg(population) FROM city);

核心问题点

  • 主查询中聚合函数与非聚合字段混用且无GROUP BY:你在SELECT里同时放了name、countrycode、population这些单条记录的字段,又放了avg(population)这个聚合函数,但没有指定GROUP BY子句。
    • 严格的SQL模式下(比如MySQL的ONLY_FULL_GROUP_BY),这会直接报错,因为数据库无法确定非聚合字段要取哪条记录的值。
    • 非严格模式下,数据库可能会随机返回一条记录的非聚合字段值,搭配整个表的平均人口,结果完全不符合预期。

修正方案

如果你想要的是找出所有人口超过城市平均人口的城市,并显示这些城市的信息以及整体平均人口,可以用以下两种方式修正:

方案1:保留子查询,去掉主查询的avg(population)(无需每行显示平均人口时用)

SELECT name, countrycode, population
FROM city
WHERE population > (SELECT avg(population) FROM city);

方案2:用窗口函数显示每行对应的整体平均人口

SELECT name, countrycode, population, overall_avg
FROM (
    SELECT 
        name, 
        countrycode, 
        population,
        avg(population) OVER () AS overall_avg
    FROM city
) AS sub
WHERE population > overall_avg;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:30:45