1

これを表現するのは非常に難しい。説明させてください。チーム、ゲーム、および team_games といういくつかのテーブルがあります。Team_games には、デフォルトで 0 の「スタンディング」フィールドがあります。スタンディングが 0 より大きい場合、ゲームは終了し、スコアが報告されます。2 つのチーム ID を取得し、順位が 0 より大きい共通のゲーム数をカウントするクエリを作成しようとしています。

これがテーブルです。これまでのところ、私は自分がやりたいこと以外はすべてやりました。

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 をカウントします。

したがって、チーム 1 とチーム 2 の間で終了したゲームの数を探していた場合、最終結果は次のようになります。

-----
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 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 に答える