2011-08-05 2 views
3

3 열이 country, user_id, gender 인 테이블이 있습니다. user_id 그냥 증분, 여러 나라가 있으며 성별은 남성 또는 여성입니다. 나는 국가의 고유 목록, 각 국가의 국가와 남성과 여성의 숫자 user_id 년대의 총 수를 반환하는 하나 개의 쿼리를 실행하려면이MySQL - 국가별로 그룹화 된 남성과 여성의 수를 계산하십시오.

user_id country gender 
1  japan male 
2  peru  female 
3  japan female 
4  fiji  male 
5  peru  female 

유사합니다. 나는 전혀 다른 쿼리의 숫자를 시도했지만 한 쿼리에서 모든 결과를 반환 할 수 없으며, 가능하면이 쿼리를 사용하지 않으

country total male female 
peru 2  NUL 2 
japan 2  1 1 
fiji 1  1 NUL 

: 그래서 결과는 같을 것이다.

이 내 마지막 시도입니다 - 나는 그것의 혼란을 알고 있지만 난 아무것도 시도했다 :

SELECT DISTINCT a.country AS country, COUNT(b.gender) AS male, COUNT(c.gender) AS  female, COUNT(a.user_id) AS total 
    FROM userattributes as a 
    LEFT JOIN userattributes as b ON a.user_id=b.user_id 
    LEFT JOIN userattributes as c ON a.user_id=c.user_id 
    WHERE b.gender='male' AND c.gender='female' 
    GROUP BY country; 

사람이 하나 SELECT에서 위의 작업을 수행 할 수 있습니까?

들으

답변

3

JOIN 자체 테이블에 대한 필요가 없습니다. SUM 집합과 함께 CASE 표현식을 사용하면 충분합니다.

SELECT country 
     , COUNT(*) AS total 
     , SUM(CASE WHEN gender = 'male' THEN 1 ELSE 0 END) AS male 
     , SUM(CASE WHEN gender = 'female' THEN 1 ELSE 0 END) AS female 
FROM userattributes 
GROUP BY 
     country 
+0

+1 (또한 ​​.. 카운트 (사용할 수있는 다음 한 다른 널 (null))) –

+0

@ 알렉스 K. - 그게 내 첫 번째 시도했지만, 난이 예상대로 작동하지 않았다. –

관련 문제