【问题标题】:How can I sum two queries in a new table without sub queries如何在没有子查询的情况下对新表中的两个查询求和
【发布时间】:2019-06-05 21:51:10
【问题描述】:

我有两个查询从两个不同的表中获取两个不同列的总和。我面临的问题是我想避免子查询。有没有办法得到我的结果的总和?

这是第一个查询:

SELECT TeamID, Count(HomeTeamID) AS LASTCOUNT1
FROM Games LEFT JOIN Teams as team1
ON Games.HomeTeamID = team1.TeamID
GROUP BY TeamID;

这是第二个查询:

SELECT TeamID, Count(AwayTeamID) AS LASTCOUNT2
FROM Games LEFT JOIN Teams as team2
ON Games.HomeTeamID = team2.TeamID
GROUP BY TeamID;

结果:

|--TeamID--|--LASTCOUNT1--|
|    1     |       8      |
|    2     |       8      |
|    3     |       8      |
|    4     |       8      |
|    5     |       8      |
|    6     |       8      |
|    7     |       8      |
|    8     |       8      |

|--TeamID--|--LASTCOUNT2--|
|    1     |       8      |
|    2     |       8      |
|    3     |       8      |
|    4     |       8      |
|    5     |       8      |
|    6     |       8      |
|    7     |       8      |
|    8     |       8      |

如何在没有联合子查询的情况下获得所需的结果?

|--TeamID--|--LASTCOUNT1--|--LASTCOUNT2--|--TOTALCOUNT--|
|    1     |       8      |       8      |      16      |
|    2     |       8      |       8      |      16      |
|    3     |       8      |       8      |      16      |
|    4     |       8      |       8      |      16      |
|    5     |       8      |       8      |      16      |
|    6     |       8      |       8      |      16      |
|    7     |       8      |       8      |      16      |
|    8     |       8      |       8      |      16      |

谢谢!

【问题讨论】:

    标签: sql sql-server tsql sum subquery


    【解决方案1】:

    大概,您想计算每支球队的主客场比赛次数。在 SQL Server 中,您可以取消透视数据并聚合:

    SELECT v.TeamID, SUM(ishome) as num_homes, SUM(is_away) as num_aways
    FROM Teams t CROSS APPLY
         (VALUES (HomeTeamID, 1, 0), (AwayTeamId, 0, 1)
         ) v(TeamId, ishome, isaway)
    GROUP BY v.TeamID;
    

    【讨论】:

    • 这是更优雅的做法。据我了解,这会将列转换为行执行聚合(忽略空值?)。我之所以这样做,是因为我还需要一场总比赛,除了客场和主场。更改为正确。
    【解决方案2】:
    select t1.TeamID,t1.LASTCOUNT,t2.LASTCOUNT,(t1.LASTCOUNT + t2.LASTCOUNT)
     as Sum from team2 t2  
    join team1 t1 on t1.TeamID = t2.TeamID
    

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多