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

如何在SQL现有查询结果中添加另一表的COMMUNITY_AREA_NAME字段

解决方案:关联犯罪数据与普查数据获取社区名称

方法1:子查询 + 显式JOIN

这是最直观的写法,将你原有的查询作为子查询,通过社区编号关联普查表获取名称:

SELECT 
    sub.NUM_OF_CRIMES,
    sub.COMMUNITY_AREA_NUMBER,
    c.COMMUNITY_AREA_NAME
FROM (
    -- 原查询:筛选犯罪数最多的社区
    SELECT COUNT(id) AS NUM_OF_CRIMES, COMMUNITY_AREA_NUMBER
    FROM CHICAGO_CRIME_DATA
    GROUP BY COMMUNITY_AREA_NUMBER
    ORDER BY NUM_OF_CRIMES DESC
    LIMIT 1
) AS sub
JOIN CENSUS_DATA c 
ON sub.COMMUNITY_AREA_NUMBER = c.COMMUNITY_AREA_NUMBER;
  • 子查询sub会返回你之前得到的结果(犯罪数43、社区编号25)
  • JOIN通过两张表共有的COMMUNITY_AREA_NUMBER字段匹配,直接拉取对应的社区名称

方法2:CTE(公共表表达式)

如果你的数据库支持CTE(如MySQL 8.0+、PostgreSQL、SQL Server等),可以用更易读的结构:

WITH top_crime_community AS (
    SELECT COUNT(id) AS NUM_OF_CRIMES, COMMUNITY_AREA_NUMBER
    FROM CHICAGO_CRIME_DATA
    GROUP BY COMMUNITY_AREA_NUMBER
    ORDER BY NUM_OF_CRIMES DESC
    LIMIT 1
)
SELECT 
    t.NUM_OF_CRIMES,
    t.COMMUNITY_AREA_NUMBER,
    c.COMMUNITY_AREA_NAME
FROM top_crime_community t
JOIN CENSUS_DATA c 
ON t.COMMUNITY_AREA_NUMBER = c.COMMUNITY_AREA_NUMBER;

方法3:直接关联后聚合

也可以先关联两张表再聚合,注意分组时要包含社区名称(因为聚合字段外的列都要在GROUP BY里):

SELECT 
    COUNT(cd.id) AS NUM_OF_CRIMES,
    cd.COMMUNITY_AREA_NUMBER,
    ce.COMMUNITY_AREA_NAME
FROM CHICAGO_CRIME_DATA cd
JOIN CENSUS_DATA ce 
ON cd.COMMUNITY_AREA_NUMBER = ce.COMMUNITY_AREA_NUMBER
GROUP BY cd.COMMUNITY_AREA_NUMBER, ce.COMMUNITY_AREA_NAME
ORDER BY NUM_OF_CRIMES DESC
LIMIT 1;

常见问题说明

之前尝试子查询或隐式连接失败,大概率是因为:

  • 隐式连接没写对WHERE关联条件,导致出现笛卡尔积
  • 子查询的位置错误,比如没将其作为临时表使用

显式JOIN是更推荐的写法,它明确指定关联逻辑,不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:15:46