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

如何不使用GROUP BY实现该SQL大洲平均人口统计查询的相同结果?

不用GROUP BY实现大洲城市人口平均取整的查询

嘿,我懂你想绕开GROUP BY用子查询实现需求的思路,咱们来一步步修正你的写法~

你之前的子查询关联的是CO.CODE,这会导致你得到的是每个国家的城市人口平均,而不是整个大洲的。要拿到大洲级别的平均值,得把关联条件改成基于大洲的匹配才行。

这里有两种可行的子查询写法:

方法1:关联大洲的子查询(带DISTINCT去重)

因为COUNTRY表中同一个大洲会对应多个国家,直接查询会重复输出同一个大洲的结果,所以需要用DISTINCT去重:

SELECT DISTINCT 
    CO.CONTINENT,
    (SELECT FLOOR(AVG(CI.POPULATION))
     FROM CITY CI
     JOIN COUNTRY CO2 ON CI.COUNTRYCODE = CO2.CODE
     WHERE CO2.CONTINENT = CO.CONTINENT) AS AVG_CITY_POPULATION
FROM COUNTRY CO;

这个逻辑是:对于COUNTRY表中的每个大洲(去重后),子查询会找到所有属于该大洲的城市,计算它们的人口平均值并取整。

方法2:嵌套子查询匹配大洲

如果你不想用JOIN,也可以在子查询里先筛选出当前大洲的所有国家代码,再匹配对应的城市:

SELECT DISTINCT 
    CO.CONTINENT,
    (SELECT FLOOR(AVG(CI.POPULATION))
     FROM CITY CI
     WHERE CI.COUNTRYCODE IN (SELECT CODE FROM COUNTRY WHERE CONTINENT = CO.CONTINENT)) AS AVG_CITY_POPULATION
FROM COUNTRY CO;

这里的内层子查询先定位到当前大洲下的所有国家,再筛选出这些国家的城市数据计算平均取整。

结果验证

这两种写法都能和你原来的GROUP BY查询得到完全一致的结果,你可以对比执行结果确认逻辑正确性:
原查询参考:

SELECT CO.CONTINENT, FLOOR(AVG(CI.POPULATION)) 
FROM CITY CI 
INNER JOIN COUNTRY CO ON CI.COUNTRYCODE = CO.CODE 
GROUP BY CO.CONTINENT;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:49:53