2009-12-27 79 views
0

对于游戏,我想按小时计算用户注册的数量(使用MySQL。)。 很容易的,这样的事情:如何在MySQL中使用需要不同条件的列进行查询?

SELECT COUNT(*), DAY(date_user), HOUR(date_user) 
FROM users, 
GROUP BY DAY(date_user), HOUR(date_user) 

在那之后,我想只需要在其中所扮演的游戏至少一次考虑用户。我有第二张桌子和分数。

SELECT COUNT(*), DAY(date_user), HOUR(date_user) 
FROM users, scores 
WHERE users.id = scores.userid 
GROUP BY DAY(date_user), HOUR(date_user) 

大... 现在,我想这两个查询导致一个表,如:

Global signups | Signups of playing users | Day | Hour 

我还没有找到这样的工作还查询。我应该使用工会吗?还是加入?

+0

您应该使用显式连接而不是'SELECT A,B WHERE ...'。 – 2009-12-27 15:31:53

+0

你有什么理由让你按小时分组,而不是按月或按年分组? – 2009-12-27 15:33:44

+0

对于Hour&Day,它仅仅是对一小组数据的测试,所以它没问题。我会在几个月和几年后添加。 – 2009-12-27 15:53:00

回答

2

这里有一种方法:

select 
    day(date_user) 
, hour(date_user) 
, count(distinct u.id) as GlobalSignups 
, count(distinct s.userid) as SignupsOfPlayingUsers 
from users u 
left join scores s on u.id = s.userid 
group by day(date_user), hour(date_user) 

计数不同的用户ID为用户提供的总数。当左连接失败时,s.userid将为NULL,NULLs不会被count()计算在内。因此count(distinct s.userid)返回注册用户的数量。

+0

你的意思是'当左连接失败'? – 2009-12-27 15:29:26

+0

@Mark Byers:是的,编辑已经 – Andomar 2009-12-27 15:32:38

+0

哦,我应该在评论之前刷新,对不起。 :) – 2009-12-27 15:36:20

相关问题