2014-09-23 118 views
1

我有兩個表,團隊和遊戲的SQL服務器數據庫。每場比賽都有一個predict_winner列和一個贏家列。兩列都引用團隊表格ID字段。我想查詢數據庫並計算球隊預計贏得多少場比賽,以及他們實際贏得了多少場比賽。然而,根據我的查詢,它只返回一個預測勝利者或勝者的數量,無論我加入團隊表的哪一列。我如何獲得這兩列的精確計數。SQL查詢,基於相同的ID計數兩列

這是我的不正確的查詢

SELECT teams.id, count(predicted_Winner), count(winner) 
FROM teams left join games on teams.id=games.predicted_winner 
GROUP BY teams.id 
+0

向我們提供的輸入/輸出,這將是不錯的一個[sqlfiddle](http://www.sqlfiddle.com)鏈接 – zaratustra 2014-09-23 21:45:42

回答

1

既然你有games表中的兩列Teams引用表格回一列,

,你需要加入這個表背兩次Teams表,每列引用teams表一次。

SELECT t.id 
    , count(g1.predicted_Winner) AS predicted_Winner_count 
    , count(g2.winner)   AS winner_count 
FROM teams t 
LEFT JOIN games g1 on t.id = g1.predicted_winner 
LEFT JOIN games g2 on t.id = g2.winner 
GROUP BY t.id 
1

加入表兩次,一次爲每列:

SELECT teams.id, COUNT(pw.predicted_winner), COUNT(w.winner) 
FROM  teams 
LEFT JOIN games pw ON teams.id = pw.predicted_winner 
LEFT JOIN games w ON teams.id = w.winner 
GROUP BY teams.id 
0

試試這個:

with results(game_id, predicted_Winner, winner) as (
    select 1, 1, 2 union all 
    select 2, 1, 2 union all 
    select 3, 1, 1 union all 
    select 4, 4, 4 union all 
    select 5, 5, 6 union all 
    select 6, 6, 6 union all 
    select 7, 3, 5 
), teams(id) as (
    select 1 union all 
    select 2 union all 
    select 3 union all 
    select 4 union all 
    select 5 union all 
    select 6 
) 
SELECT t.id team_id 
    , count(case when predicted_winner = t.id then 1 end) 
    , count(case when predicted_winner = t.id and predicted_winner = winner then 1 end) 
    from results res 
    right join teams t on t.id = res.predicted_winner or t.id = winner 
group by t.id 
order by 1 

SQLFiddle