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

SQL中如何合并两个分组SELECT查询以查询湖泊数量多于山脉的国家

SQL实现方案

合并两个统计结果生成关联表

将两个分组统计查询作为派生表,通过国家字段关联,使用全外连接覆盖所有有统计数据的国家,用COALESCE函数将无对应统计项的空值转为0:

SELECT 
  COALESCE(m.Country, l.Country) AS Country,
  COALESCE(m.mountain_cnt, 0) AS mountain_count,
  COALESCE(l.lake_cnt, 0) AS lake_count
FROM 
  (SELECT Country, COUNT(*) AS mountain_cnt FROM geoMountain GROUP BY Country) m
FULL OUTER JOIN 
  (SELECT Country, COUNT(*) AS lake_cnt FROM geoLake GROUP BY Country) l
ON m.Country = l.Country

如果使用的数据库不支持FULL OUTER JOIN(如低版本MySQL),可以用UNION ALL的兼容方案实现:

SELECT 
  Country,
  SUM(mountain_cnt) AS mountain_count,
  SUM(lake_cnt) AS lake_count
FROM (
  SELECT Country, COUNT(*) AS mountain_cnt, 0 AS lake_cnt FROM geoMountain GROUP BY Country
  UNION ALL
  SELECT Country, 0 AS mountain_cnt, COUNT(*) AS lake_cnt FROM geoLake GROUP BY Country
) AS temp
GROUP BY Country

筛选湖泊数量多于山脉的国家

在关联表的基础上增加筛选条件即可,注意你之前示例中的条件写反了,正确的判断逻辑是湖泊计数大于山脉计数:

SELECT Country FROM (
  SELECT 
    COALESCE(m.Country, l.Country) AS Country,
    COALESCE(m.mountain_cnt, 0) AS mountain_count,
    COALESCE(l.lake_cnt, 0) AS lake_count
  FROM 
    (SELECT Country, COUNT(*) AS mountain_cnt FROM geoMountain GROUP BY Country) m
  FULL OUTER JOIN 
    (SELECT Country, COUNT(*) AS lake_cnt FROM geoLake GROUP BY Country) l
  ON m.Country = l.Country
) AS result
WHERE lake_count > mountain_count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:02