0

このクエリを書いている間、私は数時間頭を壁にぶつけていました。私は2つのテーブルを持っています。特定の日にゲームがプレイされた回数を選択したいのですが、ユーザーごとに 1 つのゲームだけをカウントします。たとえば、Ping Ping は 2011 年に 3 回再生されましたが、ユーザーは 2 人だけだったので、返したい合計は 2 です。

セッション表

DATE    GAME_ID     USER_ID
2011      1           1
2011      2           1
2011      1           1
2011      1           2
2011      2           2
2012      1           1
2012      1           1

ゲームテーブル

ID      NAME
1       PING PONG
2       TENNIS

今まで本当に苦労しました。このスニペットは一意の時間を返しますが、日付に限定されません。

SELECT DISTINCT GAME_ID,USER_ID FROM SESSIONS

クエリを日付などに制限する方法は知っていますが、2 つの列にまたがるカウントに苦労しています。上記のクエリをカウント関数に渡す必要がありますか?

どんな助けでも大歓迎です!

ありがとう

4

4 に答える 4

1

やりたいことは、特定の日付の個別のユーザーをカウントすることです。

select g.name, count(distinct s.user_id) as NumUsers
from sessions s join
     games g
     on s.game_id = g.id
where date = <whatever your date>
group by g.name
于 2012-09-05T19:14:54.687 に答える
0

user_id で group by 句を使用する必要があります

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2012-09-05T19:01:34.643 に答える
0

特定の日に特定のゲームをプレイしたユーザーの数を表示するこのクエリは、

SELECT GAME_ID, USER_ID, COUNT(DISTINCT USER_ID) FROM SESSIONS 
GROUP BY DATE, GAME_ID, USER_ID;

このクエリは、game_id私たちが表示するgame_name

SELECT Q2.USER_ID, Q2.nbr_user, GAMES.NAME FROM GAMES, 
         (SELECT GAME_ID, USER_ID, COUNT(DISTINCT USER_ID) as nbr_user
          FROM SESSIONS 
          GROUP BY DATE, GAME_ID, USER_ID) Q2
WHERE GAMES.ID = Q2.GAME_ID
于 2012-09-05T19:21:28.903 に答える
0

インライン クエリの使用:

select DATE, GAME_ID, count(*) from (
SELECT distinct s.DATE, s.GAME_ID, s.USER_ID
FROM SESSIONS s
INNER JOIN GAMES g ON s.GAME_ID =g.ID ) inn
group by DATE, GAME_ID

必要に応じて、DATE の WHERE をインライン クエリに追加します。

于 2012-09-05T19:17:58.703 に答える