2014-05-10 68 views
0

我有兩個表:SQLite的選擇查詢彙總值

player[playerId, name, surname, age] 
team[teamid, team_name, player1Id, player2Id, games_won, games_lost] 

一個球員可以在多個團隊。如何創建一個SELECT查詢,其中輸出爲:

-player name 
-age 
-games_won(summarized value from all teams where player has won) 

球員表

id | name | surname | age | 
1 | jake | wolf | 23 | 
2 | drake| blake | 22 | 
3 | luke | lake | 25 | 
4 | adam | smith | 23 | 

隊表

id | team_name | p1_Id | p2_Id | games_won | games_lost | 
1 | racers | 1  | 3  | 6  |  2  | 
1 | traders | 1  | 2  | 4  |  1  | 
1 | grands | 1  | 4  | 1  |  2  | 
1 | unicorns | 2  | 3  | 3  |  2  | 

SELECT p.name||" "||p.surname AS 'playerName', .p.age, t.games_won FROM Player p INNER JOIN Team t ON p.id=t.p1_id 

但是,這並沒有得到所有的sumarized值通過贏得比賽傑克狼已經參加了3支球隊,共贏得了11場比賽。

+0

請提供一些示例數據。你的數據結構並不合理。例如,你怎麼知道一個球員是贏了還是輸了一場比賽? –

回答

0

你可以試試這個版本:

SELECT name || ' ' || surname AS PlayerName, 
     age, 
     (SELECT SUM(games_won) FROM team WHERE player1Id = playerId OR player2Id = playerId) AS Total 
FROM player 
; 

測試here

+0

完美!像我需要的一樣工作! – HellOfACode

1

你有一個非常混亂的數據結構。如果我相信,一個隊有兩名球員和team表總結了它們,然後將其拆分爲兩個,並做了連接:

select p.name, p.surname, p.age, 
     sum(games_won) as games_won, sum(games_lost) as games_lost 
from ((select player1id as playerid, games_won, games_lost 
     from team 
    ) union all 
     (select player2id, games_won, games_lost 
     from team 
    ) 
    ) tp join 
    player p 
    on p.playerid = tp.playerid 
group by p.name, p.surname, p.age; 

更好的數據結構,將有球隊和球員之間的結/關聯表。這將有兩個重要的列:

  • TeamId
  • PlayerId