2012-09-05 57 views
0

在写这个查询时,我一直在撞墙撞了几个小时。我有两张桌子。我想选择一个游戏在某个日期播放的次数,但只计算每个用户一个游戏的次数。例如坪是在2011年打了3次,但只有2个用户,所以我想回到一共是2多列Mysql计数

sessions表

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 

我知道如何查询限制日期等,但与整个两列计数挣扎,我必须通过上述查询到的计数功能?

任何帮助将不胜感激!

感谢

回答

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 
+0

谢谢你的帮助,你保存我的电脑试图飞行! – scalabilitysolved

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添加到内联查询中。

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