2014-12-11 4 views
0

mySQL을 처음 사용했습니다. 아래 그림과 같이MySQL을 사용하는 조건으로 계산

나는 다음 표에 대한 카운트 테이블을 표시하려면 :

테이블 : 일부 레코드의 테스트

create table test 
(
age int, 
sex text 
); 

삽입 :

insert into test values(10,'Male'); 
insert into test values(15,'Male'); 
insert into test values(20,'Male'); 
insert into test values(25,'Male'); 
insert into test values(30,'Male'); 
insert into test values(10,'Female'); 
insert into test values(15,'Female'); 
insert into test values(40,'Male'); 
insert into test values(50,'Female'); 
insert into test values(60,'Female'); 

: 이제 나는 테이블에있는 연령대 사이에 남성과 여성의 수를 보여주고 싶습니다.

예상 결과 :

Age-Range sex count 
------------------------ 
    10-20  Male 3 
    10-20  Female 2 
    25-40  Male 3 
    45-60  Female 2 
+2

19848930/group-by-case-statement –

답변

2

세트에서 남성과 여성을 계산하는 것은 MySQL은 꽤 쉽지만. 조건부 sum 예를 사용할 수 있습니다.

select 
age, 
sum(sex='Male') as male_count 
sum(sex='Female') as female_count 
from test 
group by age ; 

하지만 귀하의 경우에는 범위도 고려해야하므로 그다지 진보적이지 않습니다. 여기 당신이보고있는 것을 성취 할 수있는 방법이 있지만 그것을하는 다른 더 좋은 방법이있을 수 있습니다.

select 
p.`range`, 
p.sex, 
sum(p.`count`) as `count` 
from 
(
select 
    x.`range`, 
    y.`sex`, 
    y.`age`, 
    y.`count` from( 
    select '10-20' as `range`,20 as `upper` ,10 as `lower` 
    union all 
    select '25-40' as `range`,40 as `upper` ,25 as `lower` 
    union all 
    select '45-60' as `range`,60 as `upper` ,45 as `lower` 
)x 
    left join(
    select 
    sex, 
    count(*) as `count`, 
    age from test 
    group by age,sex 

)y 
    on y.age >= x.`lower` and y.age <= x.`upper` 
)p 

group by p.`range`,p.sex 
; 
+0

soooo 많은 감사합니다. – MAK