2011-09-20 5 views
4

입니다 MySQL의 결과 행을 제외 나는 다음과 같은 SQL 쿼리가이 새 사용자 및 국가별로 그룹화 된 총 사용자 수를 보여줍니다는 카운트가 0

SELECT 
    COUNT(CASE WHEN u.account_new = 1 THEN u.user_id END) AS new_user, 
    COUNT(u.user_id) AS all_users, 
    c.country_name AS country 
FROM users u, countries c 
WHERE u.country_id = c.country_id 
GROUP BY u.country 

합니다. 새 사용자 수가 0 인 행을 제외하고 싶습니다만 위의 SQL에서이 작업을 수행하는 방법을 모르겠습니다. 지금은 PHP로 건너 뛰고 있지만 쿼리를 작성하는 더 좋은 방법이있을 거라고 생각했습니다.

모든 의견을 환영합니다.

+0

는 세계 200 개국 이상의 단지 적은 수 있습니다를, 그래서 나는 이것이 당신의 병목이 될 것임을 의심합니다. –

+0

'(u.account_new = 1 그 다음 u.user_id 끝)> 0 '을 추가하십시오. – rabudde

+1

@rabudde : _answer_을 (를) 추가하십시오. –

답변

9

사용이 : (주 HAVING 절)

SELECT 
    COUNT(CASE WHEN u.account_new = 1 THEN u.user_id END) AS new_user, 
    COUNT(u.user_id) AS all_users, 
    c.country_name AS country 
FROM users u, countries c 
WHERE u.country_id = c.country_id 
GROUP BY u.country 
HAVING COUNT(CASE WHEN u.account_new = 1 THEN u.user_id END) > 0 
3

이 계산 새로운 사용자를위한 더 나은 독서 개선이 포함

SELECT 
    SUM(u.account_new=1) AS new_user, 
    COUNT(u.user_id) AS all_users, 
    c.country_name AS country 
FROM users u, countries c 
WHERE u.country_id = c.country_id 
GROUP BY u.country 
HAVING SUM(u.account_new=1)>0 
+0

'new_user'의 의미를 변경했습니다. –

+0

왜? 'new_user'로 그는'account_new = 1'을 가진 모든 사용자를 센다. 내 문장은 논리 문장'account_new = 1'의 결과를 요약합니다. 그 결과는 똑같지 않습니까? – rabudde

+0

'u.account_new = 1 THEN u.user_id END'가 아니라 'CASE WHEN u.account_new = 1 THEN 1 ELSE 0 END' –

관련 문제