Mysql指望多列

时间:2012-09-05 18:58:31

标签: mysql sql database

在撰写此查询时,我一直在墙上撞了几个小时。我有两张桌子。我想选择在特定日期玩游戏的次数,但每个用户只计算一个游戏。例如,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函数?

非常感谢任何帮助!

由于

4 个答案:

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