在撰写此查询时,我一直在墙上撞了几个小时。我有两张桌子。我想选择在特定日期玩游戏的次数,但每个用户只计算一个游戏。例如,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
GAMES TABLE
ID NAME
1 PING PONG
2 TENNIS
到目前为止我真的很挣扎。此代码段会返回唯一的时间,但不限于日期。
SELECT DISTINCT GAME_ID,USER_ID FROM SESSIONS
我知道如何将查询限制为日期等但是在两列中难以计算,我是否必须将上述查询传递给count函数?
非常感谢任何帮助!
由于
答案 0 :(得分: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
答案 1 :(得分:0)
您需要在user_id
上使用group by子句http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
答案 2 :(得分: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添加到内联查询。
答案 3 :(得分: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