2012-06-25 1 views

답변

0

이 같은 수행 할 수 있습니다 그 짧은 버전이 될 것

select sum(case when religion = 'Muslim' 
      then 1 
      else 0 
      end) as muslims, 
     sum(case when martial_status = 'married' 
      then 1 
      else 0 
      end) as married 
     ... 
from your_table 

:

select sum(religion = 'Muslim') as muslims, 
     sum(martial_status = 'married') as married 
     ... 
from your_table 
+0

감사합니다. 나는 mysql에서 새로운 구문을 배웠다. 행복을 기원합니다. –

+1

동일성은 부울 결과로 나타나며, 이는 mysql에서 단지 0/1 값입니다. compactness에 대한 가독성을 희생 시키려면'sum (religion = 'Muslim')'등으로 간단하게 쓸 수 있습니다. – MvG

+0

@MvG : 좋습니다. 대답에 추가했습니다. –

1

그것은 정확히 하나의 SELECT -statement 아니다,하지만 당신은 하나 개의 쿼리를 검색 할 수 (열이 호환된다고 가정) :

(SELECT `martial_status`, COUNT(*) as `cnt` FROM user_details GROUP BY `martial_status`) 
UNION 
(SELECT `religion`, COUNT(*) as `cnt` FROM user_details GROUP BY `religion`) 
UNION 
(SELECT `education `, COUNT(*) as `cnt` FROM user_details GROUP BY `education`) 
1

wi 별도로 각 열을 토륨하고 노동 조합이없는 서브 쿼리 단일 select를 사용

SELECT martial_status, count(*) 
    FROM USER_DETAILS 
    GROUP BY martial_status 
UNION ALL 
    SELECT religion, count(*) 
    FROM USER_DETAILS 
    GROUP BY religion 
UNION ALL 
    SELECT education, count(*) 
    FROM USER_DETAILS 
    GROUP BY education 
0

IT- 또는 유사한 까다 롭습니다,하지만 난 단일 쿼리은 단지뿐만 아니라 당신을 위해 작동해야한다고 생각합니다. 특정 열에 대한 모든 수를 얻으려면 단일 선택을 수행 한 다음 union all을 사용하여 결과를 병합하면 단일 쿼리로 모든 열 수를 모두 얻을 수 있습니다. 당신이 당신의 테이블에 NULL 값을 가질 경우

select martial_status, count(*) from user_details group by martial_status 
union all 
select religion, count(*) from user_details group by religion 
union all 
select education, count(*) from user_details group by education 

, 당신은 결과에서 사람들을 생략 할 수 있습니다.

실제로 내가 단일 선택 당신이 필요하다면, 당신은 테이블의 레이아웃을 변경해야 할 것이지만, 그러한 요구 사항에 대한 유효한 이유를 상상할 수 없습니다.

관련 문제