+
This commit is contained in:
parent
cc7fdba689
commit
7d7483746a
4 changed files with 81 additions and 97 deletions
|
|
@ -790,12 +790,22 @@
|
|||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.person_registry</connection>
|
||||
<sql>WITH extracted_children AS (
|
||||
<sql>WITH vse as (
|
||||
select *,
|
||||
r.id as r_id
|
||||
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
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM
|
||||
public.recruits_info ri
|
||||
vse ri
|
||||
WHERE
|
||||
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
|
|
@ -804,7 +814,7 @@ children_birth_dates AS (
|
|||
recruit_id,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
|
||||
FROM
|
||||
extracted_children
|
||||
),
|
||||
|
|
@ -820,48 +830,43 @@ children_count AS (
|
|||
recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
SELECT
|
||||
COUNT(*) AS total_count,
|
||||
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
|
||||
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
|
||||
COUNT(*) FILTER (
|
||||
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
|
||||
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
|
||||
AND gender = 'MALE') -- мужчины от 18 до 70 лет
|
||||
OR
|
||||
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
|
||||
OR
|
||||
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
|
||||
AND gender = 'FEMALE') -- женщины от 18 до 45 лет
|
||||
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
|
||||
AND COALESCE(cc.children_under_16, 0) < 5 -- исключить рекрутов с 5 и более детьми младше 16 лет
|
||||
) AS mobilization_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
|
||||
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 volunteer_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
AND gender = 'MALE' -- мужчины от 18 до 50 лет
|
||||
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
|
||||
) AS contract_criterion
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
) AS contract_criterion
|
||||
FROM vse as ri
|
||||
LEFT JOIN children_count AS cc
|
||||
ON r.id = cc.recruit_id
|
||||
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id IS NOT NULL
|
||||
)
|
||||
SELECT
|
||||
ON ri.r_id = cc.recruit_id
|
||||
)
|
||||
SELECT
|
||||
total_count,
|
||||
male_count,
|
||||
female_count,
|
||||
'${REG_ID}' AS recruitment_id,
|
||||
mobilization_criterion,
|
||||
volunteer_criterion,
|
||||
contract_criterion,
|
||||
ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
|
||||
contract_criterion,
|
||||
ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
|
||||
ROUND(volunteer_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS volunteer_criterion_percent,
|
||||
ROUND(contract_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS contract_criterion_percent
|
||||
FROM recruit_data;</sql>
|
||||
|
|
|
|||
|
|
@ -795,18 +795,24 @@
|
|||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>postgres.person_registry</connection>
|
||||
<sql>WITH extracted_children AS (
|
||||
<sql>WITH vse as (
|
||||
select *,
|
||||
r.id as r_id
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id IS NOT NULL
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
FROM
|
||||
vse ri
|
||||
WHERE
|
||||
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id IS NOT NULL
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
|
|
@ -853,18 +859,13 @@ recruit_data AS (
|
|||
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
|
||||
) AS contract_criterion
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
FROM vse as ri
|
||||
LEFT JOIN children_count AS cc
|
||||
ON r.id = cc.recruit_id
|
||||
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id IS NOT NULL
|
||||
ON ri.r_id = cc.recruit_id
|
||||
)
|
||||
SELECT
|
||||
waiting_count,
|
||||
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) AS waiting_percent,
|
||||
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) AS waiting_percent,
|
||||
male_count,
|
||||
female_count,
|
||||
'${REG_ID}' AS recruitment_id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue