MySQL - 通过共享值从两行中选择,其中查询值不同

时间:2013-04-03 07:17:42

标签: mysql sql

很难说出来。让我解释。我有一些表:团队,游戏和team_games。 Team_games有一个“站立”字段,默认为0。如果站立大于0,则游戏结束并且已经报告了分数。 我正在尝试提出一个将需要两个团队ID的查询,并计算他们在常设大于零时的共同游戏数量。

这是表格。到目前为止,除了我想要的东西之外,我已经完成了所有工作。

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

3 个答案:

答案 0 :(得分: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 :(得分:0)

我不确定但这可行 select count(distinct game_id) as games_number from Team_Games where (team_id = 1 or team_id = 2) and standing >= 1;

答案 2 :(得分: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