总计不同的组合通过SQL共享价值

时间:2015-02-11 03:49:57

标签: sql sql-server

非常新的SQL,以及我所拥有的 - 基本上是一个赛季每场比赛中所有球员的数据库,就像这样(实际上有数千行):

Player   Points   Team   Date
Johnson  20       PHI    3-5-13
Jackson  30       PHI    3-5-13
Wilson   9        PHI    3-5-13
Anderson 18       DET    3-5-13
Thomas   17       DET    3-5-13
Coleman  21       CHI    3-6-13
Robinson 33       CHI    3-6-13

这就是我想要查询的内容 - 列出每个游戏的每个团队的所有双人组合并总计它们。因此,对于上面的例子,3-5-13游戏的PHI的双人组合是Johnson / Jackson,Johnson / Wilson和Jackson / Wilson。所以首先需要在同一天为同一队伍中的所有球员获得所有可能的2人组合。然后,我想要一个报告,它将在所有游戏中累计所有这些组合。所以,让我们说Johnson&杰克逊在PHI队打了25场比赛,约翰逊& amp;威尔逊13岁参加比赛 - 我希望最终结果能够读到:

Player 1    Player 2    Games
Jackson     Johnson     25
Johnson     Wilson      13

使用SQL查询执行此操作的任何简单方法?基本上我想让他们在同一天在同一支队伍中进行所有双人组合,然后获得每个组合的总比赛。

2 个答案:

答案 0 :(得分:0)

这应该这样做:

select
  p1.player as player1,
  p2.player as player2,
  sum(p1.points + p2.points) as points,
  sum(1) as games
from
  games p1 join games p2 on 
    p1.player < p2.player and 
    p1.team = p2.team and
    p1.date = p2.date
group by
  p1.player,
  p2.player

球员加入的次数超过了,所以你没有得到两次相同的组合(约翰逊 - 杰克逊+杰克逊 - 约翰逊)。

答案 1 :(得分:0)

SELECT
    [Player 1] = t1.Player,
    [Player 2] = t2.Player,
    Games = COUNT(*),
    Points = SUM(t1.Points + t2.Points),
    [Recent Game] = MAX(t1.date)
FROM Temp t1
INNER JOIN Temp t2
    ON t2.Player > t1.Player
    AND t2.Team = t1.Team
    AND t2.Date = t1.Date
GROUP BY t1.Player, t2.Player