2009-12-27 39 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

相關問題