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

如何合并City与Vehicle表并按城市分组统计各车型数量?

解决方案

要实现按城市分组统计各车型数量并生成包含总数的结果,你需要使用条件聚合,同时以City表为主表进行左连接,确保所有城市都能被统计(包括无车辆的城市)。

原SQL的问题

  • 仅筛选了Electric类型的车辆,因此只能得到该车型的统计结果,缺少Fuel和Total列
  • 使用Vehicle LEFT JOIN City会导致如果某个城市没有车辆,就不会出现在结果中(虽然你的示例数据里没有这种情况,但逻辑上存在漏洞)
  • 未处理"无数据则填0"的需求

正确SQL语句

SELECT 
    c.City_Name,
    SUM(CASE WHEN v.Vehicle_Type = 'Electric' THEN 1 ELSE 0 END) AS Electric,
    SUM(CASE WHEN v.Vehicle_Type = 'Fuel' THEN 1 ELSE 0 END) AS Fuel,
    COUNT(v.Vehicle_Id) AS Total
FROM City c
LEFT JOIN Vehicle v ON c.City_Id = v.City_Id
GROUP BY c.City_Id, c.City_Name
ORDER BY c.City_Name;

代码逻辑说明

  1. 主表选择:以City表为基础做左连接,保证所有城市都能出现在结果中,即使该城市没有任何车辆
  2. 条件聚合统计车型:
    • SUM(CASE...):针对每种车型,匹配到则计1,否则计0,求和后得到对应车型的数量,无数据时自动返回0
  3. 总数统计:COUNT(v.Vehicle_Id)统计每个城市关联到的车辆总数(因为LEFT JOIN后无车辆的城市Vehicle_Id为NULL,COUNT会忽略NULL,返回0)
  4. 分组与排序:按城市的City_Id和City_Name分组(避免不同城市重名的问题),最后按城市名称排序

执行上述SQL后,会得到你期望的结果:

City_NameElectricFuelTotal
New York123
Washington112

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:25:18