2014-12-11 2 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

http://stackoverflow.com/questions/19848930/group-by-case-statement –

ответ

2

Хотя подсчет самцов и самок из набора довольно легко в MySQL. Вы можете использовать условный sum ex.

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

Спасибо тааак много. – MAK

Смежные вопросы