diff --git a/v1_apache-hop dash mapping/job_general.hwf b/v1_apache-hop dash mapping/job_general.hwf index 4135a35..815d492 100644 --- a/v1_apache-hop dash mapping/job_general.hwf +++ b/v1_apache-hop dash mapping/job_general.hwf @@ -134,32 +134,8 @@ N Y N - 896 - 368 - - - - job_predictive.hwf - - WORKFLOW - - N - N - N - N - ${PROJECT_HOME}/predictive/job_predictive.hwf - Nothing - - Y - - N - local - N - N - Y - N - 1072 - 128 + 944 + 240 @@ -192,20 +168,6 @@ N Y - - job_info_recruits.hwf - job_predictive.hwf - N - N - Y - - - job_predictive.hwf - job_last_recording_date - N - Y - Y - job_info_recruits.hwf job_last_recording_date diff --git a/v1_apache-hop dash mapping/mil_com/total_registered.age(m_c).hpl b/v1_apache-hop dash mapping/mil_com/total_registered.age(m_c).hpl index 5e40285..b3640fa 100644 --- a/v1_apache-hop dash mapping/mil_com/total_registered.age(m_c).hpl +++ b/v1_apache-hop dash mapping/mil_com/total_registered.age(m_c).hpl @@ -41,26 +41,6 @@ Insert / update (total_registered.age) 2 Y - - Get variables 3 2 2 2 - Select values 3 2 2 2 - N - - - Select values 3 2 2 2 - Insert / update (total_registered.age) 2 2 - N - - - Table input (person_registry) регион/мужчины 2 - Get variables 3 2 2 2 - N - - - Table input (person_registry) регион/мужчины 2 - Insert / update (total_registered.age) 2 2 - N - Get variables 3 2 2 @@ -95,39 +75,6 @@ 800 - - Get variables 3 2 2 2 - GetVariable - - Y - - 1 - - none - - - - - -1 - REC_ID - -1 - none - String - - - -1 - SCM - -1 - none - String - - - - - 1536 - 1008 - - Insert / update (total_registered.age) 2 InsertUpdate @@ -282,160 +229,6 @@ 720 - - Insert / update (total_registered.age) 2 2 - InsertUpdate - - Y - - 1 - - none - - - 100 - ervu-dashboard - - - = - recruitment_id - recruitment_id - - - = - recording_date - recording_date - - - = - registered - registered - - - = - "all_M_W" - gender - - - = - convicts - convicts - - total_registered - age
- - "17_years" - 17_year_count - Y - - - "18-26_years" - 18-26_year_count - Y - - - "27-30_years" - 27-30_year_count - Y - - - "31-35_years" - 31-35_year_count - Y - - - "36-40_years" - 36-40_year_count - Y - - - "41-45_years" - 41-45_year_count - Y - - - "51+_years" - 41-45_year_count - Y - - - "all_M_W" - gender - N - - - "46-50_years" - 46-50_year_count - Y - - - "17_years_percent" - 17_year_percent - Y - - - "18-26_years_percent" - 18-26_year_percent - Y - - - "27-30_years_percent" - 27-30_year_percent - Y - - - "31-35_years_percent" - 31-35_year_percent - Y - - - "36-40_years_percent" - 36-40_year_percent - Y - - - "41-45_years_percent" - 41-45_year_percent - Y - - - "46-50_years_percent" - 46-50_year_percent - Y - - - "51+_years_percent" - 51+_year_percent - Y - - - recruitment_id - recruitment_id - N - - - registered - registered - N - - - total_count - total_count - Y - - - convicts - convicts - N - -
- Y - - - 1920 - 928 - -
Select values 3 2 2 SelectValues @@ -490,60 +283,6 @@ 800 - - Select values 3 2 2 2 - SelectValues - - Y - - 1 - - none - - - - N - - REC_ID - REC_ID - String - -2 - -2 - - false - - - false - - - - - - - - SCM - SCM - String - -2 - -2 - - false - - - false - - - - - - - - - - 1680 - 1008 - - Table input (person_registry) регион/мужчины TableInput @@ -563,46 +302,103 @@ ids AS ( -- Преобразуем строковый массив в таблицу UUID SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id ), +last_status_r as (select recruit_id, + max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time + from recruits_history + where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') + group by recruit_id +), +registered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time + where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') + --and rh.source is not null +), +last_status_n as (select recruit_id, + max(date_time) filter (where status in ('1', '1.1', '12.2', '12.10')) max_date_time + from recruits_history + where status in ('1', '1.1', '12.2', '12.10') + group by recruit_id +), +notregistered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time + where rh.status in ('1', '1.1', '12.2', '12.10') +--and rh.source is not null +), recruit_data AS ( SELECT - r.target_recruitment_id, + distinct + r.id, + ri.recruit_id AS recruit_id, + coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id, r.gender, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - r.id AS recruit_id, + CASE + WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT' + ELSE 'ALL' + END AS convicts, + 'true' AS registered, r.birth_date - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.gender IN ('MALE', 'FEMALE') - AND r.current_recruitment_id IS NOT NULL - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) + FROM public.recruits AS r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.id + join public.recruits_history rh on rh.recruit_id=r.id + WHERE + r.id in (SELECT recruit_id FROM registered) and + rh.id in (SELECT recruit_history_id FROM registered) + and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids) + UNION ALL + SELECT + distinct + r.id, + ri.recruit_id AS recruit_id, + coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id, + r.gender, + CASE + WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT' + ELSE 'ALL' + END AS convicts, + 'false' AS registered, + r.birth_date + FROM public.recruits AS r + JOIN public.recruits_info AS ri ON ri.recruit_id = r.id + JOIN public.recruits_history rh ON rh.recruit_id=r.id + WHERE + r.id in (SELECT recruit_id FROM notregistered) and + rh.id in (SELECT recruit_history_id FROM notregistered) + and coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids) ), total_count AS ( SELECT - rd.target_recruitment_id as recruitment_id, + rd.recruitment_id, rd.gender, rd.registered, + rd.convicts, COUNT(rd.recruit_id) AS total FROM recruit_data rd - GROUP BY rd.target_recruitment_id, rd.gender, rd.registered + GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts ), total_count_all AS ( SELECT - r.target_recruitment_id AS recruitment_id, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - COUNT(r.id) AS total - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.current_recruitment_id IS NOT NULL - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) - GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered' + rd.recruitment_id, + rd.registered, + rd.convicts, + COUNT(rd.recruit_id) AS total + FROM recruit_data rd + GROUP BY rd.recruitment_id, rd.registered, rd.convicts ), age_counts AS ( SELECT - rd.target_recruitment_id as recruitment_id, + rd.recruitment_id, rd.gender, rd.registered, + rd.convicts, COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", @@ -612,26 +408,23 @@ age_counts AS ( COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count" FROM recruit_data rd - GROUP BY rd.target_recruitment_id, rd.gender, rd.registered + GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts ), age_counts_all AS ( SELECT - r.target_recruitment_id AS recruitment_id, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count" - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.current_recruitment_id IS NOT NULL - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) - GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered' + r.recruitment_id, + r.registered, + r.convicts, + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", + COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count" + FROM recruit_data r + GROUP BY r.recruitment_id, r.registered, r.convicts ) SELECT current_date AS recording_date, @@ -657,13 +450,14 @@ SELECT WHEN tc.gender = 'MALE' THEN 'M' ELSE 'W' END)::text AS gender, - 'ALL' AS convicts, + tc.convicts, tc.registered::text FROM total_count tc LEFT JOIN age_counts ac ON ac.recruitment_id = tc.recruitment_id AND ac.gender = tc.gender AND ac.registered = tc.registered + AND ac.convicts = tc.convicts UNION ALL SELECT current_date AS recording_date, @@ -686,12 +480,13 @@ SELECT COALESCE(tca.total, 0) AS total_count, tca.recruitment_id, 'ALL' AS gender, - 'ALL' AS convicts, + tca.convicts, tca.registered::text FROM total_count_all tca LEFT JOIN age_counts_all aca ON aca.recruitment_id = tca.recruitment_id - AND aca.registered = tca.registered + AND aca.registered = tca.registered + AND aca.convicts = tca.convicts Y @@ -699,201 +494,6 @@ LEFT JOIN age_counts_all aca 720 - - Table input (person_registry) регион/мужчины 2 - TableInput - - Y - - 1 - - none - - - ervu_person_registry - N - 0 - WITH -ids AS ( - -- Преобразуем строковый массив в таблицу UUID - SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id -), -gender_separations AS ( - SELECT 'MALE' AS gender - UNION ALL - SELECT 'FEMALE' AS gender -), -registered_separation AS ( - SELECT 'true' AS registered - UNION ALL - SELECT 'false' AS registered -), -data_combinations AS ( - -- Создаём все комбинации recruitment_id, gender и registered - SELECT - i.recruitment_id AS recruitment_id, - gs.gender, - rs.registered - FROM ids i - CROSS JOIN gender_separations gs - CROSS JOIN registered_separation rs -), -recruit_data AS ( - SELECT - r.target_recruitment_id, - r.gender, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - r.id AS recruit_id, - r.birth_date - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.gender IN ('MALE', 'FEMALE') - AND r.current_recruitment_id IS NOT NULL - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) - AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' -), -total_count AS ( - SELECT - dc.recruitment_id, - dc.gender, - dc.registered, - COUNT(rd.recruit_id) AS total - FROM data_combinations dc - LEFT JOIN recruit_data rd - ON rd.target_recruitment_id = dc.recruitment_id - AND rd.gender = dc.gender - AND rd.registered = dc.registered - GROUP BY dc.recruitment_id, dc.gender, dc.registered -), -total_count_all AS ( - SELECT - r.target_recruitment_id AS recruitment_id, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - COUNT(r.id) AS total - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.current_recruitment_id IS NOT NULL - AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) - GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered' -), -age_counts AS ( - SELECT - dc.recruitment_id, - dc.gender, - dc.registered, - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", - COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count" - FROM data_combinations dc - LEFT JOIN recruit_data rd - ON rd.target_recruitment_id = dc.recruitment_id - AND rd.gender = dc.gender - AND rd.registered = dc.registered - GROUP BY dc.recruitment_id, dc.gender, dc.registered -), -age_counts_all AS ( - SELECT - r.target_recruitment_id AS recruitment_id, - r.vu_current_info->>'isMilitaryRegistered' AS registered, - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", - COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count" - FROM public.recruits r - LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') - AND r.current_recruitment_id IS NOT NULL - AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' - AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) - GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered' -) -SELECT - current_date AS recording_date, - COALESCE(ac."17_year_count", 0) AS "17_year_count", - COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent", - COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count", - COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent", - COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count", - COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent", - COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count", - COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent", - COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count", - COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent", - COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count", - COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent", - COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count", - COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent", - COALESCE(ac."51+_year_count", 0) AS "51+_year_count", - COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent", - COALESCE(tc.total, 0) AS total_count, - dc.recruitment_id, - (CASE - WHEN dc.gender = 'MALE' THEN 'M' - WHEN dc.gender = 'FEMALE' THEN 'W' - ELSE null - END)::text AS gender, - 'CONVICT' AS convicts, - dc.registered::text -FROM data_combinations dc -LEFT JOIN total_count tc - ON tc.recruitment_id = dc.recruitment_id - AND tc.gender = dc.gender - AND tc.registered = dc.registered -LEFT JOIN age_counts ac - ON ac.recruitment_id = dc.recruitment_id - AND ac.gender = dc.gender - AND ac.registered = dc.registered -UNION ALL -SELECT - current_date AS recording_date, - COALESCE(aca."17_year_count", 0) AS "17_year_count", - COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent", - COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count", - COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent", - COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count", - COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent", - COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count", - COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent", - COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count", - COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent", - COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count", - COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent", - COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count", - COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent", - COALESCE(aca."51+_year_count", 0) AS "51+_year_count", - COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent", - COALESCE(tca.total, 0) AS total_count, - dc.recruitment_id, - 'ALL' AS gender, - 'CONVICT' AS convicts, - dc.registered::text -FROM data_combinations dc -LEFT JOIN total_count_all tca - ON tca.recruitment_id = dc.recruitment_id - AND tca.registered = dc.registered -LEFT JOIN age_counts_all aca - ON aca.recruitment_id = dc.recruitment_id - AND aca.registered = dc.registered - - Y - - - 1296 - 928 - -