Результаты SQL-запроса по годам

У меня есть таблица Client со следующими столбцами.

 Admit_date    Gender     Homeless   Unemployed    Deleted 
 4/2/2012      Male         Yes         Yes           0
 1/1/2011      Female       Yes         Yes           0
 12/2/2011     Male          No          No           0
 5/23/2009     Female       Yes         Yes           0
 4/3/2009      Male          No          No           0
 7/4/2010      Male         Yes         Yes           0
 9/2/2010      Male         Yes         Yes           0 

Мне нужно показать процент каждой группы в каждом году. Я думаю, что для этого потребуется сводная таблица:

                 2009      2010     2011    2012
 Admitted         2          2        2      1
 Male            50%       100%     50%    100%
 Female          50%         0      50%      0%
 Homeless        50%       100%     50%     100%
 Unemployed      50%       100%     50%     100% 

Этот запрос дает мне счет за каждый год:

 select year(admit_date_c) as Year_of_Admit,count((admit_date_c)) as Admitted
 from clients where deleted = '0' 
 group by year(admit_date_c)

 Year_of_Admit   Admitted
   2009             2
   2010             2
   2011             2
   2012             1

Я испробовал множество итераций запросов, используя Case Count, но не могу понять, как получить количество или процентное соотношение пола, бездомных и безработных. Как только я это сделаю, я думаю, что смогу повернуть стол, чтобы получить нужный мне дисплей.


person Stan    schedule 07.05.2012    source источник
comment
Какая система баз данных и какая версия?? SQL — это всего лишь язык структурированных запросов — язык, используемый многими системами баз данных — SQL — это НЕ продукт базы данных… многие вещи зависят от поставщика, поэтому мы действительно нужно знать, какую систему баз данных вы используете....   -  person marc_s    schedule 07.05.2012


Ответы (1)


Я думаю, что это должно сделать это:

select year(admit_date) as year_of_admit,
  sum(case when gender='Male' then 1 else 0 end)*100/count(*) as Male, 
  sum(case when gender='Female' then 1 else 0 end)*100/count(*) as Female, 
  sum(case when homeless='Yes' then 1 else 0 end)*100/count(*) as Homeless
from client
group by year(admit_date)

Я не знаю, могут ли у вас быть значения, отличные от «Мужской/Женский» или «Да/Нет», например «неизвестно». В этом случае вам нужно будет решить, означают ли, скажем, 10 мужчин, 5 женщин и 5 неизвестных 50% мужчин, т.е. 50%, как известно, являются мужчинами, или 66% мужчин, т.е. 66% тех, чей пол известен. являются мужчинами.

person Jay    schedule 07.05.2012
comment
Это делает это. Я ценю вашу помощь. - person Stan; 08.05.2012