0

在写这个查询时,我已经把头撞在墙上几个小时了。我有两张桌子。我想选择在某个日期玩游戏的次数,但每个用户只计算一个游戏。比如 2011 年 Ping Ping 玩了 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

我知道如何将查询限制为日期等,但在两列之间的计数方面遇到了困难,我是否必须将上面的查询传递给计数函数?

任何帮助将不胜感激!

谢谢

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 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 回答
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 回答