2013-04-03 20 views
1

很難短語這個由兩行選擇。讓我解釋。我有幾個表格:團隊,遊戲和team_games。 Team_games有一個默認爲0的「站立」字段。如果站立率大於0,則遊戲結束並且報告得分。 我試圖拿出一個查詢,將需要兩個團隊的ID,和計數的他們遊戲在共同的數量在那裏站立大於零。MySQL的 - 通過一個共享的值,其中查詢值是不同的

這裏的表。到目前爲止,除了我想要的以外,我做了所有事情。

Teams 
--------------------- 
team_id  team_name 
--------------------- 
    1   Test 
    2   Test 2 

Games 
--------------------- 
game_id start_time 
--------------------- 
    1   (unix) 
    2   - 
    3   - 

Team Games 
--------------------------------- 
game_id  team_id  standing 
--------------------------------- 
    1   1    1 
    1   2    2 
    2   1    2 
    2   2    1 
    3   1    1 
    3   2    2 

如此反覆,我想在那裏TEAM_ID是1或2,遊戲ID是一樣的捕捉只是行,再算上獨特的遊戲的ID。

所以,如果我一直在尋找它完成了一個團隊和團隊兩者之間的遊戲數量,最終的結果將是:

----- 
COUNT 
----- 
    3 
+0

爲什麼是結果'3'? –

+0

這將是計數其中一個行具有相同的遊戲ID的兄弟行的行數......但兩個ID在查詢中指定的,它不能只是用相同的遊戲ID的任何兄弟姐妹。 – lwansbrough

回答

1
SELECT COUNT(*) totalgames 
FROM 
     (
      SELECT Game_ID 
      FROM TeamGames 
      WHERE team_ID IN (1, 2) -- specify the teams here 
      GROUP BY Game_ID 
      HAVING COUNT(*) = 2  -- number of teams specified 
        AND SUM(standing = 0) = 0 
     ) s 

輸出

╔════════════╗ 
║ TOTALGAMES ║ 
╠════════════╣ 
║   3 ║ 
╚════════════╝ 
+1

釘住它!非常感謝你 - 我對你明白我的要求印象深刻。 – lwansbrough

+0

不用客氣:'很高興幫助。 –

0

我不知道,但是這可能工作 select count(distinct game_id) as games_number from Team_Games where (team_id = 1 or team_id = 2) and standing >= 1;

+0

如果有一組team_games的其中具有相同game_id但是一個有TEAM_ID = 3,而另一個有TEAM_ID = 2 – lwansbrough

+0

you'are右這將失敗。我只是假設game_id只能是兩次。我不知道什麼運動是DB,但如果在一場比賽可以參加只有兩支球隊我會做Team_Game與team_id_1和team_id_2,使game_id獨特。 – codeTemplar

+0

在大多數情況下都是如此,是的。事實上,我必須考慮擁有兩個以上球隊的現實 - 因爲它將整個過程變成了一場噩夢。謝謝。 – lwansbrough

0

您可以通過,如果你想刪除從SELECT子句團隊,以及組。

SELECT T1.TEAM_ID, T2.TEAM_ID, COUNT(*) 
FROM 
TEAM_GAMES T1, TEAM_GAMES T2 
WHERE T2.TEAM_ID <> T1.TEAM_ID 
AND T2.GAME_ID = T2.GAME_ID 
AND T1.STANDING > 0 AND T2.STANDING > 0 
GROUP BY T1.TEAM_ID, T2.TEAM_ID 
相關問題