【问题标题】:SQL sum values for each ID每个 ID 的 SQL 总和值
【发布时间】:2021-10-01 08:43:28
【问题描述】:

我有一个关于火车的数据集,其中包含一个客户信息表,该表是一个代表年龄组和该年龄组旅客数量的数字。

ID 表示具有多个出发时间的位置,该位置具有多个年龄组。

数据看起来像这样

StationID Time of Departure TravellerID Amount of travellers
1 12:13 4001 30
1 12:13 4002 15
1 19:45 4001 10
1 19:45 4002 20

我想总结每次出发的旅客人数 我试着这样编码:

SELECT StationID,[Time of Departure], sum(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

GROUP BY StationID, [Time of Departure]

结果是这样的:

StationID Time of Departure Amount
1 12:13 75
1 12:13 75
1 19:45 75
1 19:45 75

但我想要这样:

StationID Time of Departure Amount
1 12:13 45
1 19:45 30

【问题讨论】:

  • 限定所有列(至少在涉及多个表时)是一种很好的编程习惯。例如TS.PK_StationID 而不仅仅是Amount。 (我们不知道Amount属于哪个表。)
  • 好提示,我尽量注意这个

标签: sql sum


【解决方案1】:

看来,你做的不一样。根据你的数据查询是正确的

 WITH CTE(StationID,DEPARTURE_TIME,TRAVELLERID,AMOUNT_OF_TRAVELLERS) AS
 (
   SELECT 1,CAST('12:13'AS TIME),4001,30 UNION ALL
   SELECT 1,CAST('12:13'AS TIME),4002,15 UNION ALL
   SELECT 1,CAST('19:45'AS TIME),4001,10 UNION ALL
   SELECT 1,CAST('19:45'AS TIME),4002,20  
 ) 
 SELECT C.StationID,C.DEPARTURE_TIME,SUM(AMOUNT_OF_TRAVELLERS)TOTAL_TRAVELLERS
 FROM CTE AS C
 GROUP BY C.StationID,C.DEPARTURE_TIME

【讨论】:

    【解决方案2】:

    您应该将列指定为DD.StationID。它将作为预期结果返回。

    SELECT DD.StationID,DD.[Time of Departure], sum(DD.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
    
    GROUP BY DD.StationID, DD.[Time of Departure]
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2018-06-28
      • 1970-01-01
      • 2012-11-28
      • 2014-08-29
      相关资源
      最近更新 更多