2016-11-05 2 views
1

У меня есть таблица, в которой имеет место рождения и половСоздание статистики таблицы, использование псевдонима в случае

SELECT `tblresultdatetime`, `tblresultbirthdate`, `tblgendertexten` 

FROM `ci_wizard_results` 

INNER JOIN ci_wizard_genders ON ci_wizard_results.tblresultgender = ci_wizard_genders.tblgenderid 

Возвраты:
enter image description here

Теперь я хочу, чтобы создать таблицу, как это: enter image description here


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

select *,year(`tblresultdatetime`)-year(`tblresultbirthdate`) - (right(`tblresultdatetime`,5) < right(`tblresultbirthdate`,5)) as age from `ci_wizard_results` 


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

select *,year(`tblresultdatetime`)-year(`tblresultbirthdate`) - (right(`tblresultdatetime`,5) < right(`tblresultbirthdate`,5)) as age, 
count(case when age <= 30 and age> 39 then 1 end) as agegroup3039 


from `ci_wizard_results` 


Но вы не можете использовать псевдоним в случае, так что я своего рода застрял. Любое предложение, как я могу продолжить?

(Моя конечная цель, чтобы отобразить данные в отчете с помощью reportico)

Спасибо!

ответ

2

Если предположить, что возраст вычислить просто используя

year(`tblresultdatetime`)-year(`tblresultbirthdate`) 

вы можете использовать случай, когда и группу, например,

select 
     case when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 0 and 30 then '0 - 30' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 31 and 40 then '31 - 40' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 41 and 50 then '41 - 50'    
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 51 and 60 then '51 - 60' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 61 and 70 then '61 - 70' 
      else '70+' as Group end, 
     sum(case when `tblgendertexten` = 'man' then 1 else 0 end) as man,  
     sum(case when `tblgendertexten` = 'woman' then 1 else 0 end) as woman,  
     sum(1) as total 
FROM `ci_wizard_results` 
INNER JOIN ci_wizard_genders ON ci_wizard_results.tblresultgender = ci_wizard_genders.tblgenderid 
group by case when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 0 and 30 then '0 - 30' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 31 and 40 then '31 - 40' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 41 and 50 then '41 - 50'    
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 51 and 60 then '51 - 60' 
      when year(`tblresultdatetime`)-year(`tblresultbirthdate`) between 61 and 70 then '61 - 70' 
      else '70+' as Group end 
union 
select 
     'total ', 
     sum(case when `tblgendertexten` = 'man' then 1 else 0 end) as man,  
     sum(case when `tblgendertexten` = 'woman' then 1 else 0 end) as woman,  
     sum(1) as total 
FROM `ci_wizard_results` 
INNER JOIN ci_wizard_genders ON ci_wizard_results.tblresultgender = ci_wizard_genders.tblgenderid 
+0

Спасибо так много! это работает! – mitch2k