2009-12-27 2 views
0

게임의 경우 사용자 가입 수를 시간 단위로 계산하고 싶습니다 (MySQL 사용). 그런 아주 쉽게, 뭔가 :MySQL에서 다른 조건이 필요한 열을 쿼리하는 방법은 무엇입니까?

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

그 후, 나는 단지 게임을 한 번 이상 플레이 한 고려 사용자에 먹고 싶어. 점수가있는 두 번째 테이블이 있습니다. 나는 아직 이것에 대한 작업 쿼리를 발견하지 않았습니다

Global signups | Signups of playing users | Day | Hour 

:

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

대 ... 지금, 내가 좋아하는 두 쿼리가 한 테이블에 결과를하고자합니다. 노동 조합을 사용해야합니까? 아니면 조인?

+0

'SELECT A, B WHERE ...'대신 명시 적 조인을 사용해야합니다. –

+0

시간대별로 그룹화해야하지만 월별 또는 연도별로 그룹화하는 이유가 있습니까? –

+0

Hour & Day의 경우 짧은 데이터 세트를 테스트 한 것이므로 괜찮습니다. 나는 몇 개월과 몇 년 후에 추가 할 것이다. –

답변

2

여기에 한 가지 방법이다 : 서로 다른 사용자 ID의 계산

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) 

사용자의 총 수를 제공합니다. 왼쪽 조인에 실패하면 s.useridNULL이고 NULLscount()으로 계산되지 않습니다. 따라서 count(distinct s.userid)은 가입 한 사용자 수를 반환합니다.

+0

'왼쪽 결합이 실패 할 때'를 의미합니까? –

+0

@ 마크 바이어스 : 예, 이미 편집했습니다. – Andomar

+0

아, 미안하다고 생각하기 전에 새로 고쳐야 할 것 같습니다. :) –