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

SQL统计各大洲城市及国家数量的查询写法与错误排查

原写法问题说明

  • 你写的WHERE co.continent = co2.continent确实不合法:UNION前后的两个查询是完全独立的执行单元,各自的作用域隔离,第二个查询无法引用第一个查询里的co表别名。
  • 此外UNION要求两个查询返回的列数、对应列的数据类型完全匹配,你第一个查询返回2列,第二个仅返回1列,本身也不符合UNION的语法要求。

正确实现方案

推荐两种常用写法,都可以直接满足需求:

写法1:简洁版(适合小数据量场景)

直接关联两张表后用COUNT(DISTINCT)统计不重复的国家数量即可:

SELECT 
    co.continent 大洲名称,
    COUNT(c.id) 对应城市总数量,
    COUNT(DISTINCT co.code) 对应国家总数量
FROM Country co
LEFT JOIN City c ON c.countrycode = co.code
GROUP BY co.continent;

注意用LEFT JOIN而不是INNER JOIN,避免过滤掉没有对应城市的大洲,导致统计遗漏。

写法2:高性能版(适合大数据量场景)

先单独统计每个国家的城市数,再按大洲聚合,避免关联后产生大量重复行影响统计效率:

-- 先统计每个国家的城市总数
WITH country_city_stat AS (
    SELECT countrycode, COUNT(*) city_cnt
    FROM City
    GROUP BY countrycode
)
-- 按大洲聚合最终结果
SELECT 
    co.continent 大洲名称,
    COUNT(co.code) 对应国家总数量,
    COALESCE(SUM(cs.city_cnt), 0) 对应城市总数量
FROM Country co
LEFT JOIN country_city_stat cs ON co.code = cs.countrycode
GROUP BY co.continent;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:05