1

很难说这个。让我解释。我有几张桌子:teams、games 和 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
4

3 回答 3

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 ║
╚════════════╝
于 2013-04-03T07:31:24.563 回答
0

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

于 2013-04-03T07:26:46.247 回答
0

如果需要,您可以从 select 子句和 group by 中删除团队。

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
于 2013-04-03T07:36:44.980 回答