2015-02-11 44 views
0

很新的SQL,這裏就是我 - 在一個賽季的每場比賽的所有球員基本數據庫,像這樣(它實際上是成千上萬行):總計鮮明的組合共享一個值通過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人組合。然後,我想要一份報告,將所有遊戲中所有組合的總數。所以我們說約翰遜&傑克遜在25總場比賽的PHI隊和約翰遜&威爾遜在13打 - 我想最後的結果爲:

Player 1 Player 2 Games 
Jackson  Johnson  25 
Johnson  Wilson  13 

任何簡單的方法用SQL做到這一點查詢?基本上我想要得到所有在同一天在同一個球隊上的兩人組合,然後獲得每個人的總比賽。

+0

你到目前爲止試過了什麼?首先,我會說你必須創建一些子查詢和連接子查詢,如'SELECT * FROM Players Player1 INNER JOIN Players Player2 ON Player1.Name <> Player2.Name'我可能錯了,但這只是一開始....你也可以嘗試在這裏做一個小提琴... http://www.sqlfiddle.com/ – 2015-02-11 03:58:59

+0

你能解釋這部分**約翰遜和傑克遜在PHI球隊總共25場比賽中打出** – 2015-02-11 04:27:32

回答

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 

球員與大於加盟,這樣你就不會得到相同的組合兩次(約翰遜 - 傑克遜+傑克遜 - 約翰遜)。

+0

我認爲這是在做伎倆 - 非常感謝 - 我會再試驗一下,看看是否有什麼東西不會像我想要的那樣出現。 – 2015-02-11 04:32:53

+0

實際上是一個快速跟進 - 除了總分和總數之外,我怎樣才能得到最近發生的事件(即最近的日期和團隊)? – 2015-02-11 04:45:18

+0

您可以將團隊添加到group by並選擇,它不會更改結果,並在日期中使用max() – 2015-02-11 05:18:20

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