From 66b234139c310712f0a2c83d43bd8ed40eb8e8eb Mon Sep 17 00:00:00 2001 From: Ruslan Date: Fri, 11 Oct 2024 01:13:41 +0300 Subject: [PATCH] // --- .../main_dashboard.recruitment_campaign.ktr | 469 +++++++++++++++++- .../recruitment_campaign.subpoenas.ktr | 206 +++++--- .../total_registered.education_level.ktr | 319 +++++++----- .../total_registered.removed_registry.ktr | 38 +- .../country/total_registered.subpoenas.ktr | 166 +++++-- .../recruitment_campaign.subpoenas(reg).ktr | 294 +++++++---- .../total_registered.education_level(reg).ktr | 317 +++++++----- ...total_registered.removed_registry(reg).ktr | 330 ++---------- .../total_registered.subpoenas(reg).ktr | 244 +++++---- 9 files changed, 1514 insertions(+), 869 deletions(-) diff --git a/mappings/country/main_dashboard.recruitment_campaign.ktr b/mappings/country/main_dashboard.recruitment_campaign.ktr index 6ce1380..9ef1e84 100644 --- a/mappings/country/main_dashboard.recruitment_campaign.ktr +++ b/mappings/country/main_dashboard.recruitment_campaign.ktr @@ -504,6 +504,57 @@ + + ervu_person_registry + person-dbhost + POSTGRESQL + Native + person-dbname + 4444 + person-dbuser + Encrypted 2be98afb80fd5818ba554aa72ce93bcc9 + + + + + + FORCE_IDENTIFIERS_TO_LOWERCASE + N + + + FORCE_IDENTIFIERS_TO_UPPERCASE + N + + + IS_CLUSTERED + N + + + PORT_NUMBER + 4444 + + + PRESERVE_RESERVED_WORD_CASE + Y + + + QUOTE_ALL_FIELDS + N + + + SUPPORTS_BOOLEAN_DATA_TYPE + N + + + SUPPORTS_TIMESTAMP_DATA_TYPE + N + + + USE_POOLING + N + + + postgres.subpoena subpoena-dbhost @@ -557,15 +608,55 @@ - Table input (subpoena) РФ/весна - Insert / update (main_dashboard.recruitment_campaign) 2 + Sort rows 2 2 + Merge join 2 + Y + + + Sort rows 3 + Merge join 2 + Y + + + Table input (person_registry) РФ/осень + Sort rows 3 Y Table input (subpoena) РФ/осень + Sort rows 2 2 + Y + + + Merge join 2 Insert / update (main_dashboard.recruitment_campaign) Y + + Sort rows 2 2 2 + Merge join 2 2 + Y + + + Sort rows 3 2 + Merge join 2 2 + Y + + + Table input (subpoena) РФ/весна + Sort rows 2 2 2 + Y + + + Merge join 2 2 + Insert / update (main_dashboard.recruitment_campaign) 2 + Y + + + Table input (person_registry) РФ/весна + Sort rows 3 2 + Y + Insert / update (main_dashboard.recruitment_campaign) @@ -666,8 +757,8 @@ - 928 - 288 + 1184 + 128 Y @@ -770,8 +861,346 @@ - 928 - 352 + 1184 + 400 + Y + + + + Merge join 2 + MergeJoin + + Y + + 1 + + none + + + FULL OUTER + Sort rows 2 2 + Sort rows 3 + + org + + + org + + + + + + + + + + + 864 + 128 + Y + + + + Merge join 2 2 + MergeJoin + + Y + + 1 + + none + + + FULL OUTER + Sort rows 2 2 2 + Sort rows 3 2 + + org + + + org + + + + + + + + + + + 864 + 400 + Y + + + + Sort rows 2 2 + SortRows + + Y + + 1 + + none + + + %%java.io.tmpdir%% + out + 1000000 + + N + + N + + + org + Y + N + N + 0 + N + + + + + + + + + + + + 768 + 128 + Y + + + + Sort rows 2 2 2 + SortRows + + Y + + 1 + + none + + + %%java.io.tmpdir%% + out + 1000000 + + N + + N + + + org + Y + N + N + 0 + N + + + + + + + + + + + + 768 + 400 + Y + + + + Sort rows 3 + SortRows + + N + + 1 + + none + + + %%java.io.tmpdir%% + out + 1000000 + + N + + N + + + org + Y + N + N + 0 + N + + + + + + + + + + + + 752 + 240 + Y + + + + Sort rows 3 2 + SortRows + + N + + 1 + + none + + + %%java.io.tmpdir%% + out + 1000000 + + N + + N + + + org + Y + N + N + 0 + N + + + + + + + + + + + + 752 + 512 + Y + + + + Table input (person_registry) РФ/весна + TableInput + + Y + + 1 + + none + + + ervu_person_registry + SELECT +1 AS org, +COUNT(*) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' -- мужчины от 18 до 30 лет + AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки +) AS new_recruits, +COUNT(*) FILTER ( + WHERE conscription = true +) AS postponement_granted, +ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(COUNT(*) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' -- мужчины от 18 до 30 лет + AND (conscription IS NULL OR conscription = false)), 0), 2) AS postponement_granted_percent +FROM public.recruits AS r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.id + WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + 0 + + N + N + N + + + + + + + + + + 496 + 512 + Y + + + + Table input (person_registry) РФ/осень + TableInput + + Y + + 1 + + none + + + ervu_person_registry + SELECT +1 AS org, +COUNT(*) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' -- мужчины от 18 до 30 лет + AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки +) AS new_recruits, +COUNT(*) FILTER ( + WHERE conscription = true +) AS postponement_granted, +ROUND(COUNT(*) FILTER (WHERE conscription = true) * 100.0 / NULLIF(COUNT(*) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' -- мужчины от 18 до 30 лет + AND (conscription IS NULL OR conscription = false)), 0), 2) AS postponement_granted_percent +FROM public.recruits AS r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.id + WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + 0 + + N + N + N + + + + + + + + + + 496 + 240 Y @@ -809,7 +1238,7 @@ LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id - WHERE sr.type = '1' + WHERE sr.type = '3' AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30 ), last_status_data AS ( @@ -842,7 +1271,7 @@ t2 AS ( t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared FROM last_status - WHERE sub_stat_hist = '5' + WHERE sub_stat_hist in ('5', '5.1') ), t4 AS ( SELECT COUNT(DISTINCT recruit_id) AS new_recruits @@ -854,11 +1283,11 @@ SELECT t3.count_not_appeared, ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent, ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent, - t4.new_recruits, + -- t4.new_recruits, 0 AS postponement_have_right, - 0 AS postponement_granted, + -- 0 AS postponement_granted, 0 AS postponement_have_right_percent, - 0 AS postponement_granted_percent, + -- 0 AS postponement_granted_percent, 'Весна' AS spring_autumn, '00' AS recruitment_id, 1 AS org @@ -880,8 +1309,8 @@ JOIN t4 ON true; - 512 - 352 + 496 + 400 Y @@ -919,7 +1348,7 @@ JOIN t4 ON true; LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id - WHERE sr.type = '1' + WHERE sr.type = '3' -- статус изменен на 3 AND EXTRACT(YEAR FROM AGE(s.date_birth)) BETWEEN 18 AND 30 ), last_status_data AS ( @@ -952,7 +1381,7 @@ t2 AS ( t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared FROM last_status - WHERE sub_stat_hist = '5' + WHERE sub_stat_hist in ('5', '5.1') -- добавлен статус 5.1 ), t4 AS ( SELECT COUNT(DISTINCT recruit_id) AS new_recruits @@ -964,11 +1393,11 @@ SELECT t3.count_not_appeared, ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_on_subpoenas_percent, ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_on_subpoenas_percent, - t4.new_recruits, + -- t4.new_recruits, 0 AS postponement_have_right, - 0 AS postponement_granted, + -- 0 AS postponement_granted, 0 AS postponement_have_right_percent, - 0 AS postponement_granted_percent, + -- 0 AS postponement_granted_percent, 'Осень' AS spring_autumn, '00' AS recruitment_id, 1 AS org @@ -990,8 +1419,8 @@ JOIN t4 ON true; - 512 - 288 + 496 + 128 Y diff --git a/mappings/country/recruitment_campaign.subpoenas.ktr b/mappings/country/recruitment_campaign.subpoenas.ktr index 544b6e4..6631b43 100644 --- a/mappings/country/recruitment_campaign.subpoenas.ktr +++ b/mappings/country/recruitment_campaign.subpoenas.ktr @@ -550,7 +550,7 @@ Table input (subpoena) Весна/РФ - Insert / update (recruitment_campaign.subpoenas) 2 + Insert / update (recruitment_campaign.subpoenas) 3 Y @@ -663,6 +663,26 @@ spring_autumn N + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -673,13 +693,13 @@ - 880 + 864 128 Y - Insert / update (recruitment_campaign.subpoenas) 2 + Insert / update (recruitment_campaign.subpoenas) 3 InsertUpdate Y @@ -787,6 +807,26 @@ spring_autumn N + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -797,7 +837,7 @@ - 880 + 864 240 Y @@ -815,7 +855,7 @@ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -827,15 +867,16 @@ rdi.id AS rdi_id, ssi.delivery_code AS d_code, ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса - FROM public.subpoena s - JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id - JOIN public.subpoena_status AS ss ON ss.id = s.status_id - JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id - JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id - LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id - LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id - LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id + FROM subpoena s + JOIN subpoena_history AS sh ON sh.subpoena_id = s.id + JOIN subpoena_status AS ss ON ss.id = s.status_id + JOIN subpoena_status AS ssh ON ssh.id = sh.status_id + JOIN subpoena_reason AS sr ON sr.id = s.reason_id + LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id + LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id + LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type = '3' + and ssh.code not in ('3.14','3.7','3.72', '3.71') ), -- фильтруем только последние статусы для каждой повестки last_status AS ( @@ -852,12 +893,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -887,7 +928,7 @@ t8 AS ( -- количество повесток по которым введе t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -897,31 +938,45 @@ t10 AS ( t11 AS ( SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status -) -SELECT +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена + FROM last_status + WHERE d_code is null +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') + ) +SELECT t1.count_subpoena, t2.average_appeared, t3.count_appeared, - t4.count_not_appeared, - t5.count_not_ap_good_reason, - t6.count_ap_not_required, - t7.count_restrictions_applied, - t8.count_introduced_measures, - t9.count_paper, + t4.count_not_appeared, + t5.count_not_ap_good_reason, + t6.count_ap_not_required, + t7.count_restrictions_applied, + t8.count_introduced_measures, + t9.count_paper, t10.count_electron, t11.count_restrictions, - ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, - ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, - ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, - ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, - ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, - ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, - ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, + t12.count_not_delivery, + t13.appear_date_is_good, + ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, + ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, + ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, + ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных + ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных '00' AS recruitment_id, - 0 as rest, + 0 as rest, 'Весна' as spring_autumn, - 1 AS org + 1 AS org FROM t1 FULL OUTER JOIN t2 ON 1 = 1 FULL OUTER JOIN t3 ON 1 = 1 @@ -932,7 +987,10 @@ FULL OUTER JOIN t7 ON 1 = 1 FULL OUTER JOIN t8 ON 1 = 1 FULL OUTER JOIN t9 ON 1 = 1 FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1; +FULL OUTER JOIN t11 ON 1 = 1 +FULL OUTER JOIN t12 ON 1 = 1 +FULL OUTER JOIN t13 ON 1 = 1; + 0 N @@ -965,7 +1023,7 @@ FULL OUTER JOIN t11 ON 1 = 1; postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -977,15 +1035,16 @@ FULL OUTER JOIN t11 ON 1 = 1; rdi.id AS rdi_id, ssi.delivery_code AS d_code, ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn -- добавляем строку для получения последнего статуса - FROM public.subpoena s - JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id - JOIN public.subpoena_status AS ss ON ss.id = s.status_id - JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id - JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id - LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id - LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id - LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id - WHERE sr.type = '3' -- код про призывную комиссию + FROM subpoena s + JOIN subpoena_history AS sh ON sh.subpoena_id = s.id + JOIN subpoena_status AS ss ON ss.id = s.status_id + JOIN subpoena_status AS ssh ON ssh.id = sh.status_id + JOIN subpoena_reason AS sr ON sr.id = s.reason_id + LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id + LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id + LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id + WHERE sr.type = '3' + and ssh.code not in ('3.14','3.7','3.72', '3.71') ), -- фильтруем только последние статусы для каждой повестки last_status AS ( @@ -1002,12 +1061,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1037,7 +1096,7 @@ t8 AS ( -- количество повесток по которым введе t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1047,31 +1106,45 @@ t10 AS ( t11 AS ( SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status -) -SELECT +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена + FROM last_status + WHERE d_code is null +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') + ) +SELECT t1.count_subpoena, t2.average_appeared, t3.count_appeared, - t4.count_not_appeared, - t5.count_not_ap_good_reason, - t6.count_ap_not_required, - t7.count_restrictions_applied, - t8.count_introduced_measures, - t9.count_paper, + t4.count_not_appeared, + t5.count_not_ap_good_reason, + t6.count_ap_not_required, + t7.count_restrictions_applied, + t8.count_introduced_measures, + t9.count_paper, t10.count_electron, t11.count_restrictions, - ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, - ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, - ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, - ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, - ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, - ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, - ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, + t12.count_not_delivery, + t13.appear_date_is_good, + ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, + ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, + ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, + ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных + ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных '00' AS recruitment_id, - 0 as rest, + 0 as rest, 'Осень' as spring_autumn, - 1 AS org + 1 AS org FROM t1 FULL OUTER JOIN t2 ON 1 = 1 FULL OUTER JOIN t3 ON 1 = 1 @@ -1082,7 +1155,10 @@ FULL OUTER JOIN t7 ON 1 = 1 FULL OUTER JOIN t8 ON 1 = 1 FULL OUTER JOIN t9 ON 1 = 1 FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1; +FULL OUTER JOIN t11 ON 1 = 1 +FULL OUTER JOIN t12 ON 1 = 1 +FULL OUTER JOIN t13 ON 1 = 1; + 0 N diff --git a/mappings/country/total_registered.education_level.ktr b/mappings/country/total_registered.education_level.ktr index 850a332..a1b8d10 100644 --- a/mappings/country/total_registered.education_level.ktr +++ b/mappings/country/total_registered.education_level.ktr @@ -885,57 +885,84 @@ SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL ), education_status AS ( SELECT ri.id, -- Высшее образование (российское или иностранное) - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, -- Среднее профессиональное образование (если нет высшего) - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' = '10' + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, -- Общее образование (если нет высшего и среднего) - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, -- Нет данных об образовании (российское или иностранное) - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL ), final_counts AS ( SELECT @@ -946,13 +973,13 @@ final_counts AS ( FROM education_status ) SELECT - 'ALL' AS gender, + 'ALL' AS gender, '00' AS recruitment_id, higher, average_prof, only_general, count_nodata, - total_count.total, + total_count.total, ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage, ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage, ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage, @@ -993,55 +1020,86 @@ FROM final_counts, total_count; SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + AND r.gender = 'FEMALE' ), education_status AS ( SELECT ri.id, - -- Высшее образование: если есть высшее образование в российском или иностранном блоке - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + + -- Высшее образование (российское или иностранное) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, - -- Среднее профессиональное образование: если есть код 10, но нет высшего - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' = '10' + -- Среднее профессиональное образование (если нет высшего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, - -- Общее образование: если нет высшего и среднего, но есть код 7 или 9 - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('7', '9') + -- Общее образование (если нет высшего и среднего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, - -- Нет данных об образовании - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + -- Нет данных об образовании (российское или иностранное) + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data + FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + AND r.gender = 'FEMALE' ), final_counts AS ( SELECT @@ -1052,13 +1110,13 @@ final_counts AS ( FROM education_status ) SELECT - 'W' as gender, - '00' as recruitment_id, + 'W' AS gender, + '00' AS recruitment_id, higher, average_prof, only_general, count_nodata, - total_count.total, + total_count.total, ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage, ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage, ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage, @@ -1099,55 +1157,86 @@ FROM final_counts, total_count; SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + AND r.gender = 'MALE' ), education_status AS ( SELECT ri.id, - -- Высшее образование: если есть высшее образование в российском или иностранном блоке - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + + -- Высшее образование (российское или иностранное) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, - -- Среднее профессиональное образование: если есть код 10, но нет высшего - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' = '10' + -- Среднее профессиональное образование (если нет высшего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, - -- Общее образование: если нет высшего и среднего, но есть код 7 или 9 - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' -- проверка на массив - AND education->>'kodUrObr' IN ('7', '9') + -- Общее образование (если нет высшего и среднего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, - -- Нет данных об образовании - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + -- Нет данных об образовании (российское или иностранное) + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data + FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE' and r.current_recruitment_id is not null and r.target_recruitment_id is not null + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL + AND r.target_recruitment_id IS NOT NULL + AND r.gender = 'MALE' ), final_counts AS ( SELECT @@ -1158,13 +1247,13 @@ final_counts AS ( FROM education_status ) SELECT - 'M' as gender, - '00' as recruitment_id, + 'M' AS gender, + '00' AS recruitment_id, higher, average_prof, only_general, count_nodata, - total_count.total, + total_count.total, ROUND(higher * 100.0 / NULLIF(total_count.total, 0), 2) AS higher_percentage, ROUND(average_prof * 100.0 / NULLIF(total_count.total, 0), 2) AS average_prof_percentage, ROUND(only_general * 100.0 / NULLIF(total_count.total, 0), 2) AS only_general_percentage, diff --git a/mappings/country/total_registered.removed_registry.ktr b/mappings/country/total_registered.removed_registry.ktr index 0b4668f..3228b84 100644 --- a/mappings/country/total_registered.removed_registry.ktr +++ b/mappings/country/total_registered.removed_registry.ktr @@ -683,29 +683,29 @@ postgres.decision-document-service SELECT -COUNT(*) AS removed_registry, -COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст -COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть -'0' AS deprivation_citizenship, -'0' AS travel_abroad, -'0' AS living_abroad, -'0' AS other, -'0' AS deprivation_citizen_percents, -ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent, -ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent, -'0' AS travel_abroad_percent, -'0' AS living_abroad_percent, -'0' AS other_percent, -'00' AS recruitment_id + COUNT(*) AS removed_registry, + COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст + COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть + '0' AS deprivation_citizenship, + '0' AS travel_abroad, + '0' AS living_abroad, + COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other, -- Количество по другим причинам + '0' AS deprivation_citizen_percents, + ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent, -- Процент по причине предельный возраст + ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent, -- Процент по причине смерть + '0' AS travel_abroad_percent, + '0' AS living_abroad_percent, + ROUND(COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent, -- Процент по другим причинам + '00' AS recruitment_id FROM public.recruit AS r JOIN public.decision AS d - ON d.recruit_id = r.id + ON d.recruit_id = r.id JOIN public.decision_type AS dt - ON dt.id = d.type_id + ON dt.id = d.type_id WHERE r.system_pgs_status = '1.3' - AND r.current_recruitment IS NOT NULL - AND r.target_recruitment IS NOT NULL - AND dt.code = '9' + AND r.current_recruitment IS NOT NULL + AND r.target_recruitment IS NOT NULL + AND dt.code IN ('9', '10'); 0 N diff --git a/mappings/country/total_registered.subpoenas.ktr b/mappings/country/total_registered.subpoenas.ktr index ce9d6fa..190975a 100644 --- a/mappings/country/total_registered.subpoenas.ktr +++ b/mappings/country/total_registered.subpoenas.ktr @@ -563,7 +563,7 @@ Table input (subpoena) РФ/не рег - Insert / update (total_registered.subpoenas) 2 + Insert / update (total_registered.subpoenas) 3 Y @@ -696,6 +696,26 @@ introduced_measures_percent Y + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -712,7 +732,7 @@ - Insert / update (total_registered.subpoenas) 2 + Insert / update (total_registered.subpoenas) 3 InsertUpdate Y @@ -840,6 +860,26 @@ introduced_measures_percent Y + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -868,7 +908,7 @@ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -889,6 +929,7 @@ LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type = '1' + and ssh.code not in ('3.14','3.7','3.72', '3.71') ), -- фильтруем только последние статусы для каждой повестки last_status AS ( @@ -905,12 +946,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -940,7 +981,7 @@ t8 AS ( -- количество повесток по которым введе t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -950,29 +991,43 @@ t10 AS ( t11 AS ( SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status -) -SELECT +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена + FROM last_status + WHERE d_code is null +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') + ) +SELECT t1.count_subpoena, t2.average_appeared, t3.count_appeared, - t4.count_not_appeared, - t5.count_not_ap_good_reason, - t6.count_ap_not_required, - t7.count_restrictions_applied, - t8.count_introduced_measures, - t9.count_paper, + t4.count_not_appeared, + t5.count_not_ap_good_reason, + t6.count_ap_not_required, + t7.count_restrictions_applied, + t8.count_introduced_measures, + t9.count_paper, t10.count_electron, t11.count_restrictions, - ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, - ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, - ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, - ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, - ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, - ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, - ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, + t12.count_not_delivery, + t13.appear_date_is_good, + ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, + ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, + ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, + ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent, - '00' AS recruitment_id, - 1 AS org, + ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных + ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных + '00' AS recruitment_id, + 1 AS org, 0 AS mil_reg FROM t1 FULL OUTER JOIN t2 ON 1 = 1 @@ -984,7 +1039,9 @@ FULL OUTER JOIN t7 ON 1 = 1 FULL OUTER JOIN t8 ON 1 = 1 FULL OUTER JOIN t9 ON 1 = 1 FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1; +FULL OUTER JOIN t11 ON 1 = 1 +FULL OUTER JOIN t12 ON 1 = 1 +FULL OUTER JOIN t13 ON 1 = 1; 0 N @@ -1017,7 +1074,7 @@ FULL OUTER JOIN t11 ON 1 = 1; postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -1038,6 +1095,7 @@ FULL OUTER JOIN t11 ON 1 = 1; LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type != '1' + and ssh.code not in ('3.14','3.7','3.72', '3.71') ), -- фильтруем только последние статусы для каждой повестки last_status AS ( @@ -1054,12 +1112,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1089,7 +1147,7 @@ t8 AS ( -- количество повесток по которым введе t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1099,29 +1157,43 @@ t10 AS ( t11 AS ( SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status -) -SELECT +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery --не вручена + FROM last_status + WHERE d_code is null +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') + ) +SELECT t1.count_subpoena, t2.average_appeared, t3.count_appeared, - t4.count_not_appeared, - t5.count_not_ap_good_reason, - t6.count_ap_not_required, - t7.count_restrictions_applied, - t8.count_introduced_measures, - t9.count_paper, + t4.count_not_appeared, + t5.count_not_ap_good_reason, + t6.count_ap_not_required, + t7.count_restrictions_applied, + t8.count_introduced_measures, + t9.count_paper, t10.count_electron, t11.count_restrictions, - ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, - ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, - ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, - ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, - ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, - ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, - ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, + t12.count_not_delivery, + t13.appear_date_is_good, + ROUND(count_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS appeared_percent, + ROUND(count_not_appeared * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(count_not_ap_good_reason * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(count_ap_not_required * 100.0 / NULLIF(count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(count_electron * 100.0 / NULLIF(count_subpoena, 0), 2) AS electron_percent, + ROUND(count_paper * 100.0 / NULLIF(count_subpoena, 0), 2) AS paper_percent, + ROUND(count_restrictions_applied * 100.0 / NULLIF(count_subpoena, 0), 2) AS restrictions_applied_percent, ROUND(count_introduced_measures * 100.0 / NULLIF(count_subpoena, 0), 2) AS introduced_measures_percent, - '00' AS recruitment_id, - 1 AS org, + ROUND(count_not_delivery * 100.0 / NULLIF(count_subpoena, 0), 2) AS not_delivery_percent, --процент не врученных + ROUND(appear_date_is_good * 100.0 / NULLIF(count_subpoena, 0), 2) AS appear_date_is_good_percent, --процент не врученных + '00' AS recruitment_id, + 1 AS org, 1 AS mil_reg FROM t1 FULL OUTER JOIN t2 ON 1 = 1 @@ -1133,7 +1205,9 @@ FULL OUTER JOIN t7 ON 1 = 1 FULL OUTER JOIN t8 ON 1 = 1 FULL OUTER JOIN t9 ON 1 = 1 FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1; +FULL OUTER JOIN t11 ON 1 = 1 +FULL OUTER JOIN t12 ON 1 = 1 +FULL OUTER JOIN t13 ON 1 = 1; 0 N diff --git a/mappings/region/recruitment_campaign.subpoenas(reg).ktr b/mappings/region/recruitment_campaign.subpoenas(reg).ktr index d7c3ffc..bbee701 100644 --- a/mappings/region/recruitment_campaign.subpoenas(reg).ktr +++ b/mappings/region/recruitment_campaign.subpoenas(reg).ktr @@ -565,12 +565,12 @@ Select values 4 3 - Insert / update (recruitment_campaign.subpoenas) + Insert / update (recruitment_campaign.subpoenas) 3 Y Select values 4 3 2 - Insert / update (recruitment_campaign.subpoenas) 2 + Insert / update (recruitment_campaign.subpoenas) 3 2 Y @@ -677,7 +677,7 @@ - Insert / update (recruitment_campaign.subpoenas) + Insert / update (recruitment_campaign.subpoenas) 3 InsertUpdate Y @@ -779,6 +779,26 @@ spring_autumn N + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -795,7 +815,7 @@ - Insert / update (recruitment_campaign.subpoenas) 2 + Insert / update (recruitment_campaign.subpoenas) 3 2 InsertUpdate Y @@ -897,6 +917,26 @@ spring_autumn N + + count_not_delivery + count_not_delivery + Y + + + appear_date_is_good + appear_date_is_good + Y + + + not_delivery_percent + not_delivery_percent + Y + + + appear_date_is_good_percent + appear_date_is_good_percent + Y + @@ -1049,7 +1089,7 @@ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -1061,21 +1101,22 @@ rdi.id AS rdi_id, ssi.delivery_code AS d_code, ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn - FROM public.subpoena s - JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id - JOIN public.subpoena_status AS ss ON ss.id = s.status_id - JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id - JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id - LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id - LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id - LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id + FROM subpoena s + JOIN subpoena_history AS sh ON sh.subpoena_id = s.id + JOIN subpoena_status AS ss ON ss.id = s.status_id + JOIN subpoena_status AS ssh ON ssh.id = sh.status_id + JOIN subpoena_reason AS sr ON sr.id = s.reason_id + LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id + LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id + LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type = '3' + AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71') AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' + COALESCE('${VK_ARRAY}', '') = '' OR s.department_id = ANY ( string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' + trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), + ',' )::uuid[] ) ) @@ -1093,12 +1134,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1128,7 +1169,7 @@ t8 AS ( t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1136,46 +1177,78 @@ t10 AS ( WHERE d_code = '7' ), t11 AS ( - SELECT COUNT(DISTINCT rdi_id) AS count_restrictions + SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery + FROM last_status + WHERE d_code IS NULL +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') ) - -SELECT +SELECT COALESCE(t1.count_subpoena, 0) AS count_subpoena, COALESCE(t2.average_appeared, 0) AS average_appeared, COALESCE(t3.count_appeared, 0) AS count_appeared, - COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, - COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, - COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, - COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, - COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, - COALESCE(t9.count_paper, 0) AS count_paper, + COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, + COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, + COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, + COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, + COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, + COALESCE(t9.count_paper, 0) AS count_paper, COALESCE(t10.count_electron, 0) AS count_electron, COALESCE(t11.count_restrictions, 0) AS count_restrictions, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS not_appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / t1.count_subpoena, 2) END AS not_ap_good_reason_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / t1.count_subpoena, 2) END AS ap_not_required_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / t1.count_subpoena, 2) END AS electron_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / t1.count_subpoena, 2) END AS paper_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / t1.count_subpoena, 2) END AS restrictions_applied_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / t1.count_subpoena, 2) END AS introduced_measures_percent, + COALESCE(t12.count_not_delivery, 0) AS count_not_delivery, + COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good, + ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent, + ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent, + ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent, + ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent, + ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent, + ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent, '${REG_ID}' AS recruitment_id, + 1 AS org, 0 AS rest, - 'Весна' AS spring_autumn, - 1 AS org + 'Осень' AS spring_autumn FROM t1 -FULL OUTER JOIN t2 ON 1 = 1 -FULL OUTER JOIN t3 ON 1 = 1 -FULL OUTER JOIN t4 ON 1 = 1 -FULL OUTER JOIN t5 ON 1 = 1 -FULL OUTER JOIN t6 ON 1 = 1 -FULL OUTER JOIN t7 ON 1 = 1 -FULL OUTER JOIN t8 ON 1 = 1 -FULL OUTER JOIN t9 ON 1 = 1 -FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1 -WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0)); +FULL OUTER JOIN t2 ON true +FULL OUTER JOIN t3 ON true +FULL OUTER JOIN t4 ON true +FULL OUTER JOIN t5 ON true +FULL OUTER JOIN t6 ON true +FULL OUTER JOIN t7 ON true +FULL OUTER JOIN t8 ON true +FULL OUTER JOIN t9 ON true +FULL OUTER JOIN t10 ON true +FULL OUTER JOIN t11 ON true +FULL OUTER JOIN t12 ON true +FULL OUTER JOIN t13 ON true +WHERE NOT ( + COALESCE('${VK_ARRAY}', '') = '' + AND ( + COALESCE(t1.count_subpoena, 0) > 0 + OR COALESCE(t2.average_appeared, 0) > 0 + OR COALESCE(t3.count_appeared, 0) > 0 + OR COALESCE(t4.count_not_appeared, 0) > 0 + OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 + OR COALESCE(t6.count_ap_not_required, 0) > 0 + OR COALESCE(t7.count_restrictions_applied, 0) > 0 + OR COALESCE(t8.count_introduced_measures, 0) > 0 + OR COALESCE(t9.count_paper, 0) > 0 + OR COALESCE(t10.count_electron, 0) > 0 + OR COALESCE(t11.count_restrictions, 0) > 0 + OR COALESCE(t12.count_not_delivery, 0) > 0 + OR COALESCE(t13.appear_date_is_good, 0) > 0 + ) +); 0 N @@ -1208,7 +1281,7 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -1220,21 +1293,22 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_ rdi.id AS rdi_id, ssi.delivery_code AS d_code, ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY sh.date_time DESC) AS rn - FROM public.subpoena s - JOIN public.subpoena_history AS sh ON sh.subpoena_id = s.id - JOIN public.subpoena_status AS ss ON ss.id = s.status_id - JOIN public.subpoena_status AS ssh ON ssh.id = sh.status_id - JOIN public.subpoena_reason AS sr ON sr.id = s.reason_id - LEFT JOIN public.restriction_document AS rd ON rd.subpoena_id = s.id - LEFT JOIN public.restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id - LEFT JOIN public.subpoena_send_info AS ssi ON ssi.subpoena_id = s.id + FROM subpoena s + JOIN subpoena_history AS sh ON sh.subpoena_id = s.id + JOIN subpoena_status AS ss ON ss.id = s.status_id + JOIN subpoena_status AS ssh ON ssh.id = sh.status_id + JOIN subpoena_reason AS sr ON sr.id = s.reason_id + LEFT JOIN restriction_document AS rd ON rd.subpoena_id = s.id + LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id + LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type = '3' + AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71') AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' + COALESCE('${VK_ARRAY}', '') = '' OR s.department_id = ANY ( string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' + trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), + ',' )::uuid[] ) ) @@ -1252,12 +1326,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1287,7 +1361,7 @@ t8 AS ( t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1295,46 +1369,78 @@ t10 AS ( WHERE d_code = '7' ), t11 AS ( - SELECT COUNT(DISTINCT rdi_id) AS count_restrictions + SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery + FROM last_status + WHERE d_code IS NULL +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') ) - -SELECT +SELECT COALESCE(t1.count_subpoena, 0) AS count_subpoena, COALESCE(t2.average_appeared, 0) AS average_appeared, COALESCE(t3.count_appeared, 0) AS count_appeared, - COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, - COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, - COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, - COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, - COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, - COALESCE(t9.count_paper, 0) AS count_paper, + COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, + COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, + COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, + COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, + COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, + COALESCE(t9.count_paper, 0) AS count_paper, COALESCE(t10.count_electron, 0) AS count_electron, COALESCE(t11.count_restrictions, 0) AS count_restrictions, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / t1.count_subpoena, 2) END AS not_appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / t1.count_subpoena, 2) END AS not_ap_good_reason_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / t1.count_subpoena, 2) END AS ap_not_required_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / t1.count_subpoena, 2) END AS electron_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / t1.count_subpoena, 2) END AS paper_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / t1.count_subpoena, 2) END AS restrictions_applied_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / t1.count_subpoena, 2) END AS introduced_measures_percent, + COALESCE(t12.count_not_delivery, 0) AS count_not_delivery, + COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good, + ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent, + ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent, + ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent, + ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent, + ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent, + ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent, '${REG_ID}' AS recruitment_id, + 1 AS org, 0 AS rest, - 'Осень' AS spring_autumn, - 1 AS org + 'Осень' AS spring_autumn FROM t1 -FULL OUTER JOIN t2 ON 1 = 1 -FULL OUTER JOIN t3 ON 1 = 1 -FULL OUTER JOIN t4 ON 1 = 1 -FULL OUTER JOIN t5 ON 1 = 1 -FULL OUTER JOIN t6 ON 1 = 1 -FULL OUTER JOIN t7 ON 1 = 1 -FULL OUTER JOIN t8 ON 1 = 1 -FULL OUTER JOIN t9 ON 1 = 1 -FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1 -WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0)); +FULL OUTER JOIN t2 ON true +FULL OUTER JOIN t3 ON true +FULL OUTER JOIN t4 ON true +FULL OUTER JOIN t5 ON true +FULL OUTER JOIN t6 ON true +FULL OUTER JOIN t7 ON true +FULL OUTER JOIN t8 ON true +FULL OUTER JOIN t9 ON true +FULL OUTER JOIN t10 ON true +FULL OUTER JOIN t11 ON true +FULL OUTER JOIN t12 ON true +FULL OUTER JOIN t13 ON true +WHERE NOT ( + COALESCE('${VK_ARRAY}', '') = '' + AND ( + COALESCE(t1.count_subpoena, 0) > 0 + OR COALESCE(t2.average_appeared, 0) > 0 + OR COALESCE(t3.count_appeared, 0) > 0 + OR COALESCE(t4.count_not_appeared, 0) > 0 + OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 + OR COALESCE(t6.count_ap_not_required, 0) > 0 + OR COALESCE(t7.count_restrictions_applied, 0) > 0 + OR COALESCE(t8.count_introduced_measures, 0) > 0 + OR COALESCE(t9.count_paper, 0) > 0 + OR COALESCE(t10.count_electron, 0) > 0 + OR COALESCE(t11.count_restrictions, 0) > 0 + OR COALESCE(t12.count_not_delivery, 0) > 0 + OR COALESCE(t13.appear_date_is_good, 0) > 0 + ) +); 0 N diff --git a/mappings/region/total_registered.education_level(reg).ktr b/mappings/region/total_registered.education_level(reg).ktr index 823584f..8cc9002 100644 --- a/mappings/region/total_registered.education_level(reg).ktr +++ b/mappings/region/total_registered.education_level(reg).ktr @@ -1236,8 +1236,8 @@ SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1251,47 +1251,76 @@ education_status AS ( SELECT ri.id, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + + -- Высшее образование (российское или иностранное) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, - - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' = '10' + + -- Среднее профессиональное образование (если нет высшего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') + -- Общее образование (если нет высшего и среднего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + -- Нет данных об образовании (российское или иностранное) + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data + FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1311,7 +1340,7 @@ final_counts AS ( FROM education_status ) SELECT - 'ALL' AS gender, + 'ALL' AS gender, '${REG_ID}' AS recruitment_id, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof, @@ -1337,7 +1366,7 @@ FROM final_counts, total_count; - 432 + 400 192 Y @@ -1358,9 +1387,8 @@ FROM final_counts, total_count; SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.gender = 'FEMALE' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1374,48 +1402,76 @@ FROM final_counts, total_count; education_status AS ( SELECT ri.id, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + + -- Высшее образование (российское или иностранное) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, - - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' = '10' + + -- Среднее профессиональное образование (если нет высшего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') + -- Общее образование (если нет высшего и среднего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + -- Нет данных об образовании (российское или иностранное) + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data + FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.gender = 'FEMALE' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'FEMALE' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1435,7 +1491,7 @@ final_counts AS ( FROM education_status ) SELECT - 'W' AS gender, + 'W' AS gender, '${REG_ID}' AS recruitment_id, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof, @@ -1482,9 +1538,8 @@ FROM final_counts, total_count; SELECT COUNT(*) AS total FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.gender = 'MALE' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1498,48 +1553,76 @@ FROM final_counts, total_count; education_status AS ( SELECT ri.id, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + + -- Высшее образование (российское или иностранное) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('1', '2', '3', '4', '5') + ) ) AS has_higher, - - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' = '10' - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' = '10' + + -- Среднее профессиональное образование (если нет высшего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' = '10' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' = '10' + ) ) AS has_average_prof, - EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education - WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') - ) OR EXISTS ( - SELECT 1 - FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education - WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' - AND education->>'kodUrObr' IN ('7', '9') + -- Общее образование (если нет высшего и среднего) + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + AND education->>'kodUrObr' IN ('7', '9') + ) ) AS has_only_general, - (ri.info->'svedRObr'->>'prOtsRObr' = '1' OR ri.info->'svedInObr'->>'prOtsInObr' = '1') AS has_no_data + -- Нет данных об образовании (российское или иностранное) + ( + NOT ( + ( + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedRObr'->'robr') AS education + WHERE jsonb_typeof(ri.info->'svedRObr'->'robr') = 'array' + ) OR EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedInObr'->'inObr') AS education + WHERE jsonb_typeof(ri.info->'svedInObr'->'inObr') = 'array' + ) + ) + ) AND ( + ri.info->'svedRObr'->>'prOtsRObr' = '1' + OR ri.info->'svedInObr'->>'prOtsInObr' = '1' + ) + ) AS has_no_data + FROM public.recruits_info ri JOIN public.recruits r ON ri.recruit_id = r.id - WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' - AND r.gender = 'MALE' - AND r.current_recruitment_id IS NOT NULL + WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true' AND r.gender = 'MALE' + AND r.current_recruitment_id IS NOT NULL AND ( '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' @@ -1559,7 +1642,7 @@ final_counts AS ( FROM education_status ) SELECT - 'M' AS gender, + 'M' AS gender, '${REG_ID}' AS recruitment_id, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE higher END AS higher, CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE average_prof END AS average_prof, @@ -1585,7 +1668,7 @@ FROM final_counts, total_count; - 432 + 416 352 Y diff --git a/mappings/region/total_registered.removed_registry(reg).ktr b/mappings/region/total_registered.removed_registry(reg).ktr index 0ba2a5e..3f081b2 100644 --- a/mappings/region/total_registered.removed_registry(reg).ktr +++ b/mappings/region/total_registered.removed_registry(reg).ktr @@ -555,91 +555,20 @@ - - postgres.person_registry - person-dbhost - POSTGRESQL - Native - person-dbname - 4444 - person-dbuser - Encrypted 2be98afb80fd5818ba554aa72ce93bcc9 - - - - - - FORCE_IDENTIFIERS_TO_LOWERCASE - N - - - FORCE_IDENTIFIERS_TO_UPPERCASE - N - - - IS_CLUSTERED - N - - - PORT_NUMBER - 4444 - - - PRESERVE_RESERVED_WORD_CASE - Y - - - QUOTE_ALL_FIELDS - N - - - SUPPORTS_BOOLEAN_DATA_TYPE - N - - - SUPPORTS_TIMESTAMP_DATA_TYPE - N - - - USE_POOLING - N - - - Get variables 2 2 Select values 2 2 Y - - Merge join 2 - Get variables 2 2 - Y - Select values 2 2 Insert / update (total_registered.removed_registry) 2 Y - Sort rows 3 - Merge join 2 - Y - - - Sort rows 2 2 - Merge join 2 - Y - - - Table input (decision-document-service) регион - Sort rows 2 2 - Y - - - Table input 2 (person_registry) регион - Sort rows 3 + Table input (decision-document-service) регион 2 + Get variables 2 2 Y @@ -802,40 +731,6 @@ Y - - Merge join 2 - MergeJoin - - Y - - 1 - - none - - - FULL OUTER - Sort rows 2 2 - Sort rows 3 - - org - - - org - - - - - - - - - - - 576 - 320 - Y - - Select values 2 2 SelectValues @@ -899,91 +794,7 @@ - Sort rows 2 2 - SortRows - - Y - - 1 - - none - - - %%java.io.tmpdir%% - out - 1000000 - - N - - N - - - org - Y - N - N - 0 - N - - - - - - - - - - - - 480 - 320 - Y - - - - Sort rows 3 - SortRows - - Y - - 1 - - none - - - %%java.io.tmpdir%% - out - 1000000 - - N - - N - - - org - Y - N - N - 0 - N - - - - - - - - - - - - 464 - 432 - Y - - - - Table input (decision-document-service) регион + Table input (decision-document-service) регион 2 TableInput Y @@ -994,102 +805,43 @@ postgres.decision-document-service - WITH t1 AS ( - SELECT COUNT(*) AS age_limit - FROM public.decision d - INNER JOIN public.decision_type dt ON dt.id = d.type_id AND dt.code = '9' - WHERE d.extra_info ->> 'cause' = '"ageLimit"' - AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' - OR d.recruitment_id = ANY ( - string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' - )::uuid[] - ) - ) -), -t2 AS ( - SELECT COUNT(*) AS death - FROM public.decision d - INNER JOIN public.decision_type dt ON dt.id = d.type_id AND dt.code = '9' - WHERE d.extra_info ->> 'cause' = '"notAlive"' - AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' - OR d.recruitment_id = ANY ( - string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' - )::uuid[] - ) - ) -) -SELECT - CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t1.age_limit, 0) END AS age_limit, - CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(t2.death, 0) END AS death, - 1 AS org, - '${REG_ID}' AS recruitment_id, - 0 AS deprivation_citizenship, - 0 AS travel_abroad, - 0 AS living_abroad, - 0 AS other, - 0 AS deprivation_citizen_percents, - 0 AS age_limit_percent, - 0 AS death_percent, - 0 AS travel_abroad_percent, - 0 AS living_abroad_percent, - 0 AS other_percent -FROM t1 -FULL OUTER JOIN t2 ON 1 = 1; - 0 - - N - Y - N - - - - - - - - - - 208 - 320 - Y - - - - Table input 2 (person_registry) регион - TableInput - - N - - 1 - - none - - - postgres.person_registry - SELECT - CASE - WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 - ELSE COUNT(*) - END AS removed_registry, - 1 AS org -FROM public.recruits r + WITH +total_info AS ( +SELECT +COUNT(*) AS removed_registry, +COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) AS age_limit, -- Количество по причине предельный возраст +COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) AS death, -- Количество по причине смерть +COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) AS other, +ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'ageLimit' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS age_limit_percent, +ROUND(COUNT(CASE WHEN d.extra_info ->> 'cause' = 'notAlive' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS death_percent, +ROUND(COUNT(CASE WHEN (d.extra_info ->> 'cause' IS NULL OR d.extra_info ->> 'cause' NOT IN ('ageLimit', 'notAlive')) THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 2) AS other_percent, +'00' AS recruitment_id +FROM public.recruit AS r +JOIN public.decision AS d + ON d.recruit_id = r.id +JOIN public.decision_type AS dt + ON dt.id = d.type_id WHERE r.system_pgs_status = '1.3' - AND r.current_recruitment_id IS NOT NULL - AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' - OR r.target_recruitment_id = ANY ( - string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' - )::uuid[] - ) - ); + AND r.current_recruitment IS NOT NULL + AND r.target_recruitment IS NOT NULL + AND dt.code in ('9','10') +) +SELECT +'${REG_ID}' AS recruitment_id, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.removed_registry, 0) END AS removed_registry, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit, 0) END AS age_limit, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death, 0) END AS death, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other, 0) END AS other, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.age_limit_percent, 0) END AS age_limit_percent, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.death_percent, 0) END AS death_percent, +CASE WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN 0 ELSE COALESCE(total_info.other_percent, 0) END AS other_percent, +'0' AS deprivation_citizenship, +'0' AS travel_abroad, +'0' AS living_abroad, +'0' AS deprivation_citizen_percents, +'0' AS travel_abroad_percent, +'0' AS living_abroad_percent +FROM total_info 0 N @@ -1104,8 +856,8 @@ WHERE r.system_pgs_status = '1.3' - 208 - 432 + 400 + 320 Y diff --git a/mappings/region/total_registered.subpoenas(reg).ktr b/mappings/region/total_registered.subpoenas(reg).ktr index 2e87463..f7053ee 100644 --- a/mappings/region/total_registered.subpoenas(reg).ktr +++ b/mappings/region/total_registered.subpoenas(reg).ktr @@ -1102,7 +1102,7 @@ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -1123,12 +1123,13 @@ LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type = '1' + AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71') AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' + COALESCE('${VK_ARRAY}', '') = '' OR s.department_id = ANY ( string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' + trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), + ',' )::uuid[] ) ) @@ -1146,12 +1147,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1181,7 +1182,7 @@ t8 AS ( t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1189,60 +1190,77 @@ t10 AS ( WHERE d_code = '7' ), t11 AS ( - SELECT COUNT(DISTINCT rdi_id) AS count_restrictions + SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery + FROM last_status + WHERE d_code IS NULL +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') ) -SELECT +SELECT COALESCE(t1.count_subpoena, 0) AS count_subpoena, COALESCE(t2.average_appeared, 0) AS average_appeared, COALESCE(t3.count_appeared, 0) AS count_appeared, - COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, - COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, - COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, - COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, - COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, - COALESCE(t9.count_paper, 0) AS count_paper, + COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, + COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, + COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, + COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, + COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, + COALESCE(t9.count_paper, 0) AS count_paper, COALESCE(t10.count_electron, 0) AS count_electron, COALESCE(t11.count_restrictions, 0) AS count_restrictions, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS not_appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS not_ap_good_reason_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS ap_not_required_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS electron_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS paper_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS restrictions_applied_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS introduced_measures_percent, - '${REG_ID}' AS recruitment_id, - 1 AS org, + COALESCE(t12.count_not_delivery, 0) AS count_not_delivery, + COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good, + ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent, + ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent, + ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent, + ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent, + ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent, + ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent, + '${REG_ID}' AS recruitment_id, + 1 AS org, 0 AS mil_reg FROM t1 -FULL OUTER JOIN t2 ON 1 = 1 -FULL OUTER JOIN t3 ON 1 = 1 -FULL OUTER JOIN t4 ON 1 = 1 -FULL OUTER JOIN t5 ON 1 = 1 -FULL OUTER JOIN t6 ON 1 = 1 -FULL OUTER JOIN t7 ON 1 = 1 -FULL OUTER JOIN t8 ON 1 = 1 -FULL OUTER JOIN t9 ON 1 = 1 -FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1 -WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0)); +FULL OUTER JOIN t2 ON true +FULL OUTER JOIN t3 ON true +FULL OUTER JOIN t4 ON true +FULL OUTER JOIN t5 ON true +FULL OUTER JOIN t6 ON true +FULL OUTER JOIN t7 ON true +FULL OUTER JOIN t8 ON true +FULL OUTER JOIN t9 ON true +FULL OUTER JOIN t10 ON true +FULL OUTER JOIN t11 ON true +FULL OUTER JOIN t12 ON true +FULL OUTER JOIN t13 ON true +WHERE NOT ( + COALESCE('${VK_ARRAY}', '') = '' + AND ( + COALESCE(t1.count_subpoena, 0) > 0 + OR COALESCE(t2.average_appeared, 0) > 0 + OR COALESCE(t3.count_appeared, 0) > 0 + OR COALESCE(t4.count_not_appeared, 0) > 0 + OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 + OR COALESCE(t6.count_ap_not_required, 0) > 0 + OR COALESCE(t7.count_restrictions_applied, 0) > 0 + OR COALESCE(t8.count_introduced_measures, 0) > 0 + OR COALESCE(t9.count_paper, 0) > 0 + OR COALESCE(t10.count_electron, 0) > 0 + OR COALESCE(t11.count_restrictions, 0) > 0 + OR COALESCE(t12.count_not_delivery, 0) > 0 + OR COALESCE(t13.appear_date_is_good, 0) > 0 + ) +); 0 N @@ -1275,7 +1293,7 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_ postgres.subpoena WITH subpoena_data AS ( - SELECT + SELECT s.id AS subpoena_id, s.status_id, sr.type, @@ -1296,12 +1314,13 @@ WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_ LEFT JOIN restriction_document_item AS rdi ON rdi.restriction_document_create_id = rd.id LEFT JOIN subpoena_send_info AS ssi ON ssi.subpoena_id = s.id WHERE sr.type != '1' + AND ssh.code NOT IN ('3.14','3.7','3.72', '3.71') AND ( - '${VK_ARRAY}' IS NULL - OR '${VK_ARRAY}' = '' + COALESCE('${VK_ARRAY}', '') = '' OR s.department_id = ANY ( string_to_array( - trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',' + trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), + ',' )::uuid[] ) ) @@ -1319,12 +1338,12 @@ t1 AS ( t2 AS ( SELECT ROUND(AVG(EXTRACT(DAY FROM (history_date::timestamp - send_date::timestamp))), 1) AS average_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t3 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_appeared FROM last_status - WHERE sub_stat_hist = '4.1' OR sub_stat_hist = '4.2' + WHERE sub_stat_hist IN ('4.1', '4.2', '4') ), t4 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_not_appeared @@ -1354,7 +1373,7 @@ t8 AS ( t9 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_paper FROM last_status - WHERE d_code = '14' + WHERE d_code != '7' ), t10 AS ( SELECT COUNT(DISTINCT subpoena_id) AS count_electron @@ -1362,60 +1381,77 @@ t10 AS ( WHERE d_code = '7' ), t11 AS ( - SELECT COUNT(DISTINCT rdi_id) AS count_restrictions + SELECT COUNT (DISTINCT rdi_id) AS count_restrictions FROM last_status +), +t12 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS count_not_delivery + FROM last_status + WHERE d_code IS NULL +), +t13 AS ( + SELECT COUNT(DISTINCT subpoena_id) AS appear_date_is_good + FROM last_status + WHERE sub_stat_hist IN ('3','3.12', '3.13', '3.15', '3.1') ) -SELECT +SELECT COALESCE(t1.count_subpoena, 0) AS count_subpoena, COALESCE(t2.average_appeared, 0) AS average_appeared, COALESCE(t3.count_appeared, 0) AS count_appeared, - COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, - COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, - COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, - COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, - COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, - COALESCE(t9.count_paper, 0) AS count_paper, + COALESCE(t4.count_not_appeared, 0) AS count_not_appeared, + COALESCE(t5.count_not_ap_good_reason, 0) AS count_not_ap_good_reason, + COALESCE(t6.count_ap_not_required, 0) AS count_ap_not_required, + COALESCE(t7.count_restrictions_applied, 0) AS count_restrictions_applied, + COALESCE(t8.count_introduced_measures, 0) AS count_introduced_measures, + COALESCE(t9.count_paper, 0) AS count_paper, COALESCE(t10.count_electron, 0) AS count_electron, COALESCE(t11.count_restrictions, 0) AS count_restrictions, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS not_appeared_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS not_ap_good_reason_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS ap_not_required_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS electron_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS paper_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS restrictions_applied_percent, - CASE WHEN COALESCE(t1.count_subpoena, 0) = 0 THEN 0 - ELSE ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) - END AS introduced_measures_percent, - '${REG_ID}' AS recruitment_id, - 1 AS org, + COALESCE(t12.count_not_delivery, 0) AS count_not_delivery, + COALESCE(t13.appear_date_is_good, 0) AS appear_date_is_good, + ROUND(COALESCE(t3.count_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appeared_percent, + ROUND(COALESCE(t4.count_not_appeared, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_appeared_percent, + ROUND(COALESCE(t5.count_not_ap_good_reason, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_ap_good_reason_percent, + ROUND(COALESCE(t6.count_ap_not_required, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS ap_not_required_percent, + ROUND(COALESCE(t10.count_electron, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS electron_percent, + ROUND(COALESCE(t9.count_paper, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS paper_percent, + ROUND(COALESCE(t7.count_restrictions_applied, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS restrictions_applied_percent, + ROUND(COALESCE(t8.count_introduced_measures, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS introduced_measures_percent, + ROUND(COALESCE(t12.count_not_delivery, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS not_delivery_percent, + ROUND(COALESCE(t13.appear_date_is_good, 0) * 100.0 / NULLIF(t1.count_subpoena, 0), 2) AS appear_date_is_good_percent, + '${REG_ID}' AS recruitment_id, + 1 AS org, 1 AS mil_reg FROM t1 -FULL OUTER JOIN t2 ON 1 = 1 -FULL OUTER JOIN t3 ON 1 = 1 -FULL OUTER JOIN t4 ON 1 = 1 -FULL OUTER JOIN t5 ON 1 = 1 -FULL OUTER JOIN t6 ON 1 = 1 -FULL OUTER JOIN t7 ON 1 = 1 -FULL OUTER JOIN t8 ON 1 = 1 -FULL OUTER JOIN t9 ON 1 = 1 -FULL OUTER JOIN t10 ON 1 = 1 -FULL OUTER JOIN t11 ON 1 = 1 -WHERE NOT (('${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '') AND (COALESCE(t1.count_subpoena, 0) > 0 OR COALESCE(t2.average_appeared, 0) > 0 OR COALESCE(t3.count_appeared, 0) > 0 OR COALESCE(t4.count_not_appeared, 0) > 0 OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 OR COALESCE(t6.count_ap_not_required, 0) > 0 OR COALESCE(t7.count_restrictions_applied, 0) > 0 OR COALESCE(t8.count_introduced_measures, 0) > 0 OR COALESCE(t9.count_paper, 0) > 0 OR COALESCE(t10.count_electron, 0) > 0 OR COALESCE(t11.count_restrictions, 0) > 0)); +FULL OUTER JOIN t2 ON true +FULL OUTER JOIN t3 ON true +FULL OUTER JOIN t4 ON true +FULL OUTER JOIN t5 ON true +FULL OUTER JOIN t6 ON true +FULL OUTER JOIN t7 ON true +FULL OUTER JOIN t8 ON true +FULL OUTER JOIN t9 ON true +FULL OUTER JOIN t10 ON true +FULL OUTER JOIN t11 ON true +FULL OUTER JOIN t12 ON true +FULL OUTER JOIN t13 ON true +WHERE NOT ( + COALESCE('${VK_ARRAY}', '') = '' + AND ( + COALESCE(t1.count_subpoena, 0) > 0 + OR COALESCE(t2.average_appeared, 0) > 0 + OR COALESCE(t3.count_appeared, 0) > 0 + OR COALESCE(t4.count_not_appeared, 0) > 0 + OR COALESCE(t5.count_not_ap_good_reason, 0) > 0 + OR COALESCE(t6.count_ap_not_required, 0) > 0 + OR COALESCE(t7.count_restrictions_applied, 0) > 0 + OR COALESCE(t8.count_introduced_measures, 0) > 0 + OR COALESCE(t9.count_paper, 0) > 0 + OR COALESCE(t10.count_electron, 0) > 0 + OR COALESCE(t11.count_restrictions, 0) > 0 + OR COALESCE(t12.count_not_delivery, 0) > 0 + OR COALESCE(t13.appear_date_is_good, 0) > 0 + ) +); 0 N