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

多表连接结合GROUP BY子句计算城市占比的SQL实现问题

解决按城市计算Staff、Total及占比的SQL问题

嘿,我来帮你搞定这个需求!先理清楚我们要算的几个字段逻辑:

  • Staff:看结果里Delhi的Staff是10,对应Hospital表中Hospital1的Staff是5,而MainTable里Hospital1有2条记录,其实就是每条MainTable记录对应一次Staff值,直接求和就行
  • Total:就是每个城市下所有Data的总和,比如Delhi的20+10=30,完全对应你要的结果
  • Percentage:应该是Staff占Total的百分比,比如10/30≈33.33%这种

之前你用COUNT函数没搞定,是因为COUNT是统计记录条数的,而我们需要的是数值求和,所以得用SUM函数结合分组来实现。下面是具体的解决方案:

完整SQL语句

SELECT
    C.City,
    SUM(H.Staff) AS Staff,
    SUM(M.Data) AS Total,
    ROUND((SUM(H.Staff) * 100.0 / SUM(M.Data)), 2) AS Percentage
FROM
    MainTable M
JOIN
    Hospital H ON M.HospitalId = H.HospitalId
JOIN
    City C ON M.City = C.CityId
GROUP BY
    C.City
ORDER BY
    C.City;

语句拆解说明

  1. 表关联:把三张表通过对应的ID关联起来——MainTable的HospitalId连Hospital的HospitalId,MainTable的City(实际是CityId)连City表的CityId
  2. 聚合计算:
    • SUM(H.Staff):因为MainTable里每条记录都对应一个医院的Staff,求和后正好是结果里的Staff值(比如Delhi两条记录,每条Staff是5,加起来就是10)
    • SUM(M.Data):直接把每个城市的Data值加起来,得到Total
    • ROUND(...,2):把占比转成百分比并保留两位小数,乘以100.0是为了避免整数除法的坑(比如10/30如果直接整数除会得到0,转成浮点运算就正常了)
  3. 分组:GROUP BY C.City确保我们是按城市来聚合计算的,每个城市只出一条结果

执行后的结果

跑这个SQL后,你会得到和期望一致的表,Percentage字段也会自动算出:

CityStaffTotalPercentage
Delhi103033.33
Mumbai1010010.00
New York305060.00

为什么COUNT不行?

你之前用COUNT没成功很正常,因为COUNT是用来数有多少条记录的,比如COUNT(*)会得到每个城市的记录条数(Delhi是2),但我们需要的是Staff和Data的数值总和,所以得用SUM函数才对~

内容的提问来源于stack exchange,提问作者Fhd.ashraf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:56:23