集合求和查询

Sum query for collection

我有两个表:

Fixture (id, homeId, awayId...)
FixtureStats(id,playerId, teamOwnerId, rating, goals)

我想显示每个球员的总进球数和球员所属的球队进球数。

 PlayerId TeamOwnerId Goals  TeamGoals
    1              2      0        9
    2              2      1        9
    3              2      3        9
    4              2      5        9
    5              3      0        12       

....

下面的sql查询仍然缺少团队目标

SELECT TOP (100)
       PERCENT fs.teamownerid,
       fs.playerid,
       Count(f.id)  AS Apps,
       Sum(fs.goal) AS Goals
FROM   dbo.fixturestats AS fs
       INNER JOIN dbo.fixture AS f ON fs.fixtureid = f.id
WHERE  ( fs.rating > 0 )
GROUP  BY fs.playerid, fs.teamownerid  

试试这个:

SELECT 
    X.playerid,
    X.teamownerid,
    X.goals,
    (   SELECT Sum(goal)
        FROM   fixturestats
        WHERE  X.teamownerid = teamownerid
    ) AS TeamGoals
FROM  (
        SELECT 
            TOP (100) PERCENT fs.teamownerid AS TeamOwnerId,
            fs.playerid    AS PlayerId,
            Count(f.id)    AS Apps,
            Sum(fs.goal)   AS Goals
        FROM   dbo.fixturestats AS fs
        INNER JOIN dbo.fixture AS f ON fs.fixtureid = f.id
        WHERE  ( fs.rating > 0 )
        GROUP  BY fs.playerid,fs.teamownerid
     ) AS X  

你可以使用 Sum-Over :

select 
    *,
    Sum(Goals) over (partition by TeamOwnerId)
from 
    FixtureStats
where 
    (Rating > 0)