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

SQL按站点和发车时间统计旅客总数结果错误该如何解决

错误原因
  • 关联条件缺失导致笛卡尔积:当前SQL仅通过StationID关联三个表,未将客户信息表的旅客数据和所属的发车班次绑定,同一个站点下的所有发车时间记录会和该站点所有年龄组的旅客数据全匹配,数据被错误翻倍。
  • 统计逻辑错误:由于笛卡尔积的影响,求和时会把同一个站点所有班次的旅客人数全部累加,而非按班次单独统计,导致总人数计算错误,同时也会出现重复的分组结果。
修正方法
  1. 补充表关联条件:客户信息表除了关联站点ID外,还需要和发车班次表的唯一标识(可以是发车班次主键,也可以是站点+发车时间的联合条件)关联,确保每条旅客数据仅匹配到所属的发车班次。
  2. 明确求和字段来源,避免字段歧义。

修正后SQL示例(假设客户信息表存储了对应发车时间字段)

SELECT 
    TS.StationID,
    DD.[Time of Departure], 
    SUM(CI.[Amount of travellers]) AS Amount
FROM Train_Stations AS TS
INNER JOIN DepartureData AS DD
    ON DD.FK_StationID = TS.PK_StationID
INNER JOIN CustomerInfo AS CI
    ON CI.FK_StationID = TS.PK_StationID
    AND CI.[Time of Departure] = DD.[Time of Departure]
GROUP BY TS.StationID, DD.[Time of Departure]

如果发车班次表有独立的主键PK_DepartureID,客户信息表有对应外键FK_DepartureID,也可以用主键关联,性能更优:

SELECT 
    TS.StationID,
    DD.[Time of Departure], 
    SUM(CI.[Amount of travellers]) AS Amount
FROM Train_Stations AS TS
INNER JOIN DepartureData AS DD
    ON DD.FK_StationID = TS.PK_StationID
INNER JOIN CustomerInfo AS CI
    ON CI.FK_DepartureID = DD.PK_DepartureID
GROUP BY TS.StationID, DD.[Time of Departure]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:09:03