частично изменил алгоритм для main_dashboard.waiting_registration
This commit is contained in:
parent
ab13fad070
commit
44524126eb
5 changed files with 405 additions and 1392 deletions
|
|
@ -237,166 +237,122 @@
|
|||
<connection>ervu_person_registry</connection>
|
||||
<execute_each_row>N</execute_each_row>
|
||||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
convicts_separations AS (
|
||||
SELECT 'CONVICT' AS convicts
|
||||
UNION ALL
|
||||
SELECT 'NOTCONVICT' AS convicts
|
||||
UNION ALL
|
||||
SELECT 'ALL' AS convicts
|
||||
),
|
||||
data_combinations AS (
|
||||
SELECT
|
||||
i.recruitment_id AS recruitment_id,
|
||||
cs.convicts
|
||||
FROM ids i
|
||||
CROSS JOIN convicts_separations cs
|
||||
),
|
||||
last_status as (select recruit_id,
|
||||
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
|
||||
from recruits_history
|
||||
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
group by recruit_id),
|
||||
registered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
--and rh.source is not null
|
||||
) ,
|
||||
vse AS (
|
||||
SELECT
|
||||
SELECT
|
||||
distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
r.target_recruitment_id AS r_target_recruitment_id,
|
||||
r.vu_current_info,
|
||||
r.current_recruitment_id,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'ALL'
|
||||
END AS convicts,
|
||||
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
|
||||
r.gender,
|
||||
r.birth_date,
|
||||
r.conscription,
|
||||
ri.info,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'false' THEN 'NOTCONVICT'
|
||||
ELSE 'NOTCONVICT'
|
||||
END AS sidit
|
||||
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::uuid IN (SELECT recruitment_id FROM ids)
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
join public.recruits_history rh on rh.recruit_id=r.id
|
||||
WHERE
|
||||
r.id in (SELECT recruit_id FROM registered) and
|
||||
rh.id in (SELECT recruit_history_id FROM registered) and
|
||||
coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM
|
||||
vse ri
|
||||
WHERE
|
||||
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
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
|
||||
FROM
|
||||
extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM
|
||||
children_birth_dates
|
||||
WHERE
|
||||
AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY
|
||||
recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.r_target_recruitment_id::uuid AS recruitment_id,
|
||||
ri.sidit AS convicts,
|
||||
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
|
||||
AND gender = 'MALE')
|
||||
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
|
||||
AND gender = 'FEMALE')
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND COALESCE(cc.children_under_16, 0) < 5
|
||||
) AS mobilization_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
) AS volunteer_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
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
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_current_recruitment_id::uuid AS recruitment_id,
|
||||
ri.convicts,
|
||||
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 AND gender = 'MALE')
|
||||
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45 AND gender = 'FEMALE')
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND COALESCE(cc.children_under_16, 0) < 5
|
||||
) AS mobilization_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
) AS volunteer_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
|
||||
) AS contract_criterion
|
||||
FROM
|
||||
vse AS ri
|
||||
LEFT JOIN
|
||||
children_count AS cc
|
||||
ON
|
||||
ri.recruit_id = cc.recruit_id
|
||||
GROUP BY
|
||||
ri.r_target_recruitment_id, ri.sidit
|
||||
),
|
||||
recruit_data_all AS(
|
||||
SELECT
|
||||
'ALL' AS convicts,
|
||||
recruitment_id,
|
||||
SUM(total_count) AS total_count,
|
||||
SUM(male_count) AS male_count,
|
||||
SUM(female_count) AS female_count,
|
||||
SUM(mobilization_criterion) AS mobilization_criterion,
|
||||
SUM(volunteer_criterion) AS volunteer_criterion,
|
||||
SUM(contract_criterion) AS contract_criterion
|
||||
FROM recruit_data
|
||||
GROUP BY recruitment_id
|
||||
FROM vse AS ri
|
||||
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
|
||||
GROUP BY ri.r_current_recruitment_id, ri.convicts
|
||||
)
|
||||
SELECT
|
||||
dc.recruitment_id,
|
||||
dc.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, rda.total_count, 0) AS total_count,
|
||||
COALESCE(rd.male_count, rda.male_count, 0) AS male_count,
|
||||
COALESCE(rd.female_count, rda.female_count, 0) AS female_count,
|
||||
COALESCE(rd.mobilization_criterion, rda.mobilization_criterion, 0) AS mobilization_criterion,
|
||||
COALESCE(rd.volunteer_criterion, rda.volunteer_criterion, 0) AS volunteer_criterion,
|
||||
COALESCE(rd.contract_criterion, rda.contract_criterion, 0) AS contract_criterion,
|
||||
CASE
|
||||
WHEN COALESCE(rd.total_count, rda.total_count, 0) > 0
|
||||
THEN ROUND(COALESCE(rd.mobilization_criterion, rda.mobilization_criterion, 0)::NUMERIC
|
||||
/ COALESCE(rd.total_count, rda.total_count, 0) * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN COALESCE(rd.total_count, rda.total_count, 0) > 0
|
||||
THEN ROUND(COALESCE(rd.volunteer_criterion, rda.volunteer_criterion, 0)::NUMERIC
|
||||
/ COALESCE(rd.total_count, rda.total_count, 0) * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN COALESCE(rd.total_count, rda.total_count, 0) > 0
|
||||
THEN ROUND(COALESCE(rd.contract_criterion, rda.contract_criterion, 0)::NUMERIC
|
||||
/ COALESCE(rd.total_count, rda.total_count, 0) * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM
|
||||
data_combinations dc
|
||||
FULL OUTER JOIN recruit_data rd
|
||||
ON dc.recruitment_id = rd.recruitment_id
|
||||
AND dc.convicts = rd.convicts
|
||||
AND dc.convicts IN ('CONVICT', 'NOTCONVICT')
|
||||
FULL OUTER JOIN recruit_data_all rda
|
||||
ON dc.recruitment_id = rda.recruitment_id
|
||||
AND dc.convicts = rda.convicts
|
||||
AND dc.convicts = 'ALL';</sql>
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
rd.convicts,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.total_count, 0) AS total_count,
|
||||
COALESCE(rd.male_count, 0) AS male_count,
|
||||
COALESCE(rd.female_count, 0) AS female_count,
|
||||
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
|
||||
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
|
||||
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent
|
||||
FROM ids
|
||||
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
|
|
|
|||
|
|
@ -236,106 +236,123 @@
|
|||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
last_status as (select recruit_id,
|
||||
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
|
||||
from recruits_history
|
||||
where status in ('1', '12.7', '8.2', '8.3')
|
||||
group by recruit_id),
|
||||
notregistered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status in ('1', '12.7', '8.2', '8.3')
|
||||
--and rh.source is not null
|
||||
),
|
||||
total_recruits AS (
|
||||
SELECT COUNT(*) AS total_count
|
||||
SELECT COUNT(distinct r.id) AS total_count
|
||||
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.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
join public.recruits_history rh on rh.recruit_id=r.id
|
||||
WHERE
|
||||
r.id in (SELECT recruit_id FROM notregistered) and
|
||||
coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND r.current_recruitment_id is null
|
||||
),
|
||||
vse AS (
|
||||
SELECT
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
r.target_recruitment_id AS r_target_recruitment_id,
|
||||
r.vu_current_info,
|
||||
r.current_recruitment_id,
|
||||
r.gender,
|
||||
r.birth_date,
|
||||
r.conscription,
|
||||
ri.info
|
||||
SELECT
|
||||
distinct
|
||||
r.id AS r_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id,
|
||||
r.gender,
|
||||
r.birth_date,
|
||||
r.conscription,
|
||||
ri.info
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri
|
||||
JOIN public.recruits_info AS ri
|
||||
ON ri.recruit_id = r.id
|
||||
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
join public.recruits_history rh on rh.recruit_id=r.id
|
||||
WHERE
|
||||
r.id in (SELECT recruit_id FROM notregistered) and
|
||||
rh.id in (SELECT recruit_history_id FROM notregistered) and
|
||||
coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND r.current_recruitment_id is null
|
||||
),
|
||||
extracted_children AS (
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
SELECT
|
||||
ri.recruit_id,
|
||||
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
|
||||
FROM vse ri
|
||||
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
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
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_target_recruitment_id::uuid AS recruitment_id,
|
||||
COUNT(*) AS waiting_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 AND gender = 'MALE')
|
||||
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45 AND gender = 'FEMALE')
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND COALESCE(cc.children_under_16, 0) < 5
|
||||
) AS mobilization_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
) AS volunteer_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
|
||||
) AS contract_criterion
|
||||
),
|
||||
children_birth_dates AS (
|
||||
SELECT
|
||||
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
|
||||
FROM extracted_children
|
||||
),
|
||||
children_count AS (
|
||||
SELECT
|
||||
recruit_id,
|
||||
COUNT(*) AS children_under_16
|
||||
FROM children_birth_dates
|
||||
WHERE AGE(make_date(year, month, day)) < interval '16 years'
|
||||
GROUP BY recruit_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.r_target_recruitment_id::uuid AS recruitment_id,
|
||||
COUNT(*) AS waiting_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 AND gender = 'MALE')
|
||||
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45 AND gender = 'FEMALE')
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND COALESCE(cc.children_under_16, 0) < 5
|
||||
) AS mobilization_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
) AS volunteer_criterion,
|
||||
COUNT(*) FILTER (
|
||||
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
|
||||
AND gender = 'MALE'
|
||||
AND (conscription IS NULL OR conscription = false)
|
||||
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
|
||||
) AS contract_criterion
|
||||
FROM vse AS ri
|
||||
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
|
||||
GROUP BY ri.r_target_recruitment_id
|
||||
)
|
||||
SELECT
|
||||
ids.recruitment_id,
|
||||
SELECT
|
||||
rd.recruitment_id,
|
||||
current_date AS recording_date,
|
||||
COALESCE(rd.waiting_count, 0) AS waiting_count,
|
||||
COALESCE(rd.male_count, 0) AS male_count,
|
||||
COALESCE(rd.female_count, 0) AS female_count,
|
||||
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
|
||||
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
|
||||
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
COALESCE(rd.waiting_count, 0) AS waiting_count,
|
||||
COALESCE(rd.male_count, 0) AS male_count,
|
||||
COALESCE(rd.female_count, 0) AS female_count,
|
||||
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
|
||||
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
|
||||
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS mobilization_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS volunteer_criterion_percent,
|
||||
CASE
|
||||
WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2)
|
||||
ELSE 0
|
||||
END AS contract_criterion_percent,
|
||||
ROUND(COALESCE((rd.waiting_count::DECIMAL / NULLIF(total_recruits.total_count, 0) * 100), 0), 2) AS waiting_percent
|
||||
FROM ids
|
||||
LEFT JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
|
||||
CROSS JOIN total_recruits;</sql>
|
||||
FROM recruit_data AS rd
|
||||
CROSS JOIN total_recruits</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
|
|
|
|||
|
|
@ -41,26 +41,6 @@
|
|||
<to>Insert / update (total_registered.busyness) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Get variables 3 2 2 2</from>
|
||||
<to>Select values 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Select values 3 2 2 2</from>
|
||||
<to>Insert / update (total_registered.busyness) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) РФ/мужчины 2</from>
|
||||
<to>Get variables 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) РФ/мужчины 2</from>
|
||||
<to>Insert / update (total_registered.busyness) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2</name>
|
||||
|
|
@ -95,39 +75,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2 2</name>
|
||||
<type>GetVariable</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>REC_ID</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>SCM</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1568</xloc>
|
||||
<yloc>800</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.busyness) 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
|
|
@ -232,110 +179,6 @@
|
|||
<yloc>544</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.busyness) 2 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<commit>100</commit>
|
||||
<connection>ervu-dashboard</connection>
|
||||
<lookup>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recruitment_id</field>
|
||||
<name>recruitment_id</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>"all_M_W"</field>
|
||||
<name>gender</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>registered</field>
|
||||
<name>registered</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recording_date</field>
|
||||
<name>recording_date</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>busyness</table>
|
||||
<value>
|
||||
<name>study</name>
|
||||
<rename>study</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>work</name>
|
||||
<rename>work</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>study_percent</name>
|
||||
<rename>study_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>work_percent</name>
|
||||
<rename>work_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>registered</name>
|
||||
<rename>registered</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_work</name>
|
||||
<rename>no_info</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_work_percent</name>
|
||||
<rename>no_info_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>busyness</name>
|
||||
<rename>total_people</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>Y</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1968</xloc>
|
||||
<yloc>720</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
|
|
@ -390,60 +233,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<select_unspecified>N</select_unspecified>
|
||||
<meta>
|
||||
<name>REC_ID</name>
|
||||
<rename>REC_ID</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
<meta>
|
||||
<name>SCM</name>
|
||||
<rename>SCM</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1712</xloc>
|
||||
<yloc>800</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) РФ/мужчины</name>
|
||||
<type>TableInput</type>
|
||||
|
|
@ -460,10 +249,42 @@
|
|||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
-- Преобразуем строковый массив в таблицу UUID
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
last_status_r as (select recruit_id,
|
||||
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
|
||||
from recruits_history
|
||||
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
group by recruit_id
|
||||
),
|
||||
registered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
--and rh.source is not null
|
||||
),
|
||||
last_status_n as (select recruit_id,
|
||||
max(date_time) filter (where status in ('1', '1.1', '12.2', '12.10')) max_date_time
|
||||
from recruits_history
|
||||
where status in ('1', '1.1', '12.2', '12.10')
|
||||
group by recruit_id
|
||||
),
|
||||
notregistered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status in ('1', '1.1', '12.2', '12.10')
|
||||
--and rh.source is not null
|
||||
),
|
||||
status_info AS (
|
||||
SELECT
|
||||
r.id AS recruit_id,
|
||||
-- Проверка на обучение в вузе (есть информация и обучается)
|
||||
(
|
||||
CASE
|
||||
|
|
@ -502,6 +323,7 @@ status_info AS (
|
|||
ELSE false
|
||||
END
|
||||
) AS is_working,
|
||||
|
||||
-- Проверка на отсутствие сведений о вузе
|
||||
info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
|
||||
|
||||
|
|
@ -510,17 +332,86 @@ status_info AS (
|
|||
|
||||
-- Проверка на отсутствие сведений о работе
|
||||
info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work,
|
||||
r.target_recruitment_id AS recruitment_id,
|
||||
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.gender,
|
||||
r.vu_current_info -> 'isMilitaryRegistered' AS registered--,
|
||||
--r.vu_current_info->>'recruitmentCommercialInfo' AS sidit
|
||||
FROM public.recruits_info ri
|
||||
JOIN public.recruits r ON ri.recruit_id = r.id
|
||||
WHERE r.vu_current_info -> 'isMilitaryRegistered' IN ('true', 'false')
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
--AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' -- осужденные
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'ALL'
|
||||
END AS convicts,
|
||||
'true' AS registered
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
|
||||
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
|
||||
WHERE
|
||||
r.id in (SELECT recruit_id FROM registered)
|
||||
AND rh.id in (SELECT recruit_history_id FROM registered)
|
||||
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
|
||||
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
UNION ALL
|
||||
SELECT
|
||||
r.id AS recruit_id,
|
||||
-- Проверка на обучение в вузе (есть информация и обучается)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
|
||||
WHERE vuz->>'kodStatus' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_studying_in_vuz,
|
||||
|
||||
-- Проверка на обучение в колледже (есть информация и обучается)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
|
||||
WHERE kolledzh->>'kodStatus' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_studying_in_college,
|
||||
|
||||
-- Проверка на работу (есть информация и работает)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
|
||||
WHERE trud->>'prAktMestRab' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_working,
|
||||
|
||||
-- Проверка на отсутствие сведений о вузе
|
||||
info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
|
||||
|
||||
-- Проверка на отсутствие сведений о колледже
|
||||
info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
|
||||
|
||||
-- Проверка на отсутствие сведений о работе
|
||||
info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work,
|
||||
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
|
||||
r.gender,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'ALL'
|
||||
END AS convicts,
|
||||
'false' AS registered
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
|
||||
JOIN public.recruits_history AS rh on rh.recruit_id = r.id
|
||||
WHERE
|
||||
r.id in (SELECT recruit_id FROM notregistered)
|
||||
AND rh.id in (SELECT recruit_history_id FROM notregistered)
|
||||
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
|
||||
AND coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
),
|
||||
summary AS (
|
||||
SELECT
|
||||
|
|
@ -529,6 +420,7 @@ summary AS (
|
|||
WHEN si.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
si.convicts,
|
||||
si.registered,
|
||||
-- Количество людей, которые учатся (в вузе или колледже)
|
||||
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
|
||||
|
|
@ -540,28 +432,26 @@ summary AS (
|
|||
COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS no_info,
|
||||
|
||||
-- Общее количество людей
|
||||
COUNT(si.recruitment_id) AS total_people
|
||||
|
||||
--COUNT(CASE WHEN sidit = 'true' THEN 1 END) AS convicts
|
||||
|
||||
COUNT(si.recruit_id) AS total_people
|
||||
FROM status_info si
|
||||
GROUP BY si.recruitment_id, si.gender, si.registered
|
||||
GROUP BY si.recruitment_id, si.gender, si.registered, si.convicts
|
||||
),
|
||||
summary_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
registered,
|
||||
convicts,
|
||||
'ALL' AS gender,
|
||||
SUM(study) AS study,
|
||||
SUM(work) AS work,
|
||||
SUM(no_info) AS no_info,
|
||||
SUM(total_people) AS total_people--,
|
||||
--SUM(convicts) AS convicts
|
||||
SUM(total_people) AS total_people
|
||||
FROM summary
|
||||
GROUP BY recruitment_id, registered
|
||||
GROUP BY recruitment_id, registered, convicts
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
s.convicts,
|
||||
s.gender,
|
||||
s.registered,
|
||||
s.recruitment_id,
|
||||
|
|
@ -569,23 +459,20 @@ SELECT
|
|||
s.work,
|
||||
s.no_info,
|
||||
s.total_people,
|
||||
'ALL' AS convicts,
|
||||
|
||||
-- Процент людей, которые учатся
|
||||
COALESCE(ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS study_percent,
|
||||
ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2) AS study_percent,
|
||||
|
||||
-- Процент людей, которые работают
|
||||
COALESCE(ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS work_percent,
|
||||
ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2) AS work_percent,
|
||||
|
||||
-- Процент людей, для которых отсутствуют сведения
|
||||
COALESCE(ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS no_info_percent--,
|
||||
|
||||
--COALESCE(ROUND(s.convicts * 100.0 / NULLIF((select sum(convicts) from summary_all), 0), 2), 0.0) AS convicts_percent
|
||||
|
||||
ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2) AS no_info_percent
|
||||
FROM summary s
|
||||
UNION ALL
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
sa.convicts,
|
||||
sa.gender,
|
||||
sa.registered,
|
||||
sa.recruitment_id,
|
||||
|
|
@ -593,17 +480,15 @@ SELECT
|
|||
sa.work,
|
||||
sa.no_info,
|
||||
sa.total_people,
|
||||
'ALL' AS convicts,
|
||||
|
||||
-- Процент людей, которые учатся
|
||||
COALESCE(ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS study_percent,
|
||||
ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2) AS study_percent,
|
||||
|
||||
-- Процент людей, которые работают
|
||||
COALESCE(ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS work_percent,
|
||||
ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2) AS work_percent,
|
||||
|
||||
-- Процент людей, для которых отсутствуют сведения
|
||||
COALESCE(ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS no_info_percent--,
|
||||
--'0.0' AS convicts_percent
|
||||
ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2) AS no_info_percent
|
||||
FROM summary_all sa</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
|
|
@ -612,202 +497,6 @@ FROM summary_all sa</sql>
|
|||
<yloc>544</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) РФ/мужчины 2</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>ervu_person_registry</connection>
|
||||
<execute_each_row>N</execute_each_row>
|
||||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
-- Преобразуем строковый массив в таблицу UUID
|
||||
SELECT unnest(string_to_array(trim(both '{}' from
|
||||
'${ARR_MC}'
|
||||
), ','))::uuid AS recruitment_id
|
||||
),
|
||||
gender_separations AS (
|
||||
SELECT 'MALE' AS gender
|
||||
UNION ALL
|
||||
SELECT 'FEMALE' AS gender
|
||||
),
|
||||
registered_separation AS (
|
||||
SELECT 'true' AS registered
|
||||
UNION ALL
|
||||
SELECT 'false' AS registered
|
||||
),
|
||||
data_combinations AS (
|
||||
-- Создаём все комбинации recruitment_id, gender и registered
|
||||
SELECT
|
||||
i.recruitment_id AS recruitment_id,
|
||||
gs.gender,
|
||||
rs.registered
|
||||
FROM ids i
|
||||
CROSS JOIN gender_separations gs
|
||||
CROSS JOIN registered_separation rs
|
||||
),
|
||||
status_info AS (
|
||||
SELECT
|
||||
-- Проверка на обучение в вузе (есть информация и обучается)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedVUZ'->'vuz') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedVUZ'->'vuz') AS vuz
|
||||
WHERE vuz->>'kodStatus' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_studying_in_vuz,
|
||||
|
||||
-- Проверка на обучение в колледже (есть информация и обучается)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedKolledzh'->'kolledzh') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedKolledzh'->'kolledzh') AS kolledzh
|
||||
WHERE kolledzh->>'kodStatus' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_studying_in_college,
|
||||
|
||||
-- Проверка на работу (есть информация и работает)
|
||||
(
|
||||
CASE
|
||||
WHEN jsonb_typeof(info->'svedTrud'->'trudDeyat') = 'array' THEN
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM jsonb_array_elements(info->'svedTrud'->'trudDeyat') AS trud
|
||||
WHERE trud->>'prAktMestRab' = '1'
|
||||
)
|
||||
ELSE false
|
||||
END
|
||||
) AS is_working,
|
||||
-- Проверка на отсутствие сведений о вузе
|
||||
info->'svedVUZ'->>'prOtsSvedVUZ' = '1' AS no_info_vuz,
|
||||
|
||||
-- Проверка на отсутствие сведений о колледже
|
||||
info->'svedKolledzh'->>'prOtsSvedKolledzh' = '1' AS no_info_college,
|
||||
|
||||
-- Проверка на отсутствие сведений о работе
|
||||
info->'svedTrud'->>'prOtsSvedTrud' = '1' AS no_info_work,
|
||||
r.target_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
r.vu_current_info -> 'isMilitaryRegistered' AS registered--,
|
||||
--r.vu_current_info->>'recruitmentCommercialInfo' AS sidit
|
||||
FROM public.recruits_info ri
|
||||
JOIN public.recruits r ON ri.recruit_id = r.id
|
||||
WHERE (r.vu_current_info -> 'isMilitaryRegistered' = 'true' OR r.vu_current_info -> 'isMilitaryRegistered' = 'false')
|
||||
AND (r.gender = 'MALE' OR r.gender = 'FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' -- осужденные
|
||||
),
|
||||
summary AS (
|
||||
SELECT
|
||||
dc.recruitment_id,
|
||||
CASE
|
||||
WHEN dc.gender = 'MALE' THEN 'M'
|
||||
WHEN dc.gender = 'FEMALE' THEN 'W'
|
||||
ELSE NULL
|
||||
END AS gender,
|
||||
dc.registered,
|
||||
-- Количество людей, которые учатся (в вузе или колледже)
|
||||
COUNT(CASE WHEN is_studying_in_vuz OR is_studying_in_college THEN 1 END) AS study,
|
||||
|
||||
-- Количество людей, которые работают
|
||||
COUNT(CASE WHEN is_working THEN 1 END) AS work,
|
||||
|
||||
-- Количество людей, для которых отсутствуют сведения о вузе, колледже и работе
|
||||
COUNT(CASE WHEN no_info_vuz AND no_info_college AND no_info_work THEN 1 END) AS no_info,
|
||||
|
||||
-- Общее количество людей
|
||||
COUNT(si.recruitment_id) AS total_people
|
||||
|
||||
--COUNT(CASE WHEN sidit = 'true' THEN 1 END) AS convicts
|
||||
|
||||
FROM data_combinations dc
|
||||
LEFT JOIN status_info si
|
||||
ON si.recruitment_id = dc.recruitment_id
|
||||
AND si.gender = dc.gender
|
||||
AND si.registered::text = dc.registered
|
||||
GROUP BY dc.recruitment_id, dc.gender, dc.registered
|
||||
),
|
||||
summary_all AS (
|
||||
SELECT
|
||||
recruitment_id,
|
||||
registered,
|
||||
'ALL' AS gender,
|
||||
SUM(study) AS study,
|
||||
SUM(work) AS work,
|
||||
SUM(no_info) AS no_info,
|
||||
SUM(total_people) AS total_people--,
|
||||
--SUM(convicts) AS convicts
|
||||
FROM summary
|
||||
GROUP BY recruitment_id, registered
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
s.gender,
|
||||
s.registered,
|
||||
s.recruitment_id,
|
||||
s.study,
|
||||
s.work,
|
||||
s.no_info,
|
||||
s.total_people,
|
||||
'CONVICT' AS convicts,
|
||||
|
||||
-- Процент людей, которые учатся
|
||||
COALESCE(ROUND(s.study * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS study_percent,
|
||||
|
||||
-- Процент людей, которые работают
|
||||
COALESCE(ROUND(s.work * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS work_percent,
|
||||
|
||||
-- Процент людей, для которых отсутствуют сведения
|
||||
COALESCE(ROUND(s.no_info * 100.0 / NULLIF(s.total_people, 0), 2), 0.0) AS no_info_percent--,
|
||||
|
||||
--COALESCE(ROUND(s.convicts * 100.0 / NULLIF((select sum(convicts) from summary_all), 0), 2), 0.0) AS convicts_percent
|
||||
|
||||
FROM summary s
|
||||
UNION ALL
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
sa.gender,
|
||||
sa.registered,
|
||||
sa.recruitment_id,
|
||||
sa.study,
|
||||
sa.work,
|
||||
sa.no_info,
|
||||
sa.total_people,
|
||||
'CONVICT' AS convicts,
|
||||
|
||||
-- Процент людей, которые учатся
|
||||
COALESCE(ROUND(sa.study * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS study_percent,
|
||||
|
||||
-- Процент людей, которые работают
|
||||
COALESCE(ROUND(sa.work * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS work_percent,
|
||||
|
||||
-- Процент людей, для которых отсутствуют сведения
|
||||
COALESCE(ROUND(sa.no_info * 100.0 / NULLIF(sa.total_people, 0), 2), 0.0) AS no_info_percent--,
|
||||
--'0.0' AS convicts_percent
|
||||
FROM summary_all sa</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1328</xloc>
|
||||
<yloc>720</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
|
|
|
|||
|
|
@ -41,26 +41,6 @@
|
|||
<to>Insert / update (total_registered.education_level) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Get variables 3 2 2 2</from>
|
||||
<to>Select values 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Select values 3 2 2 2</from>
|
||||
<to>Insert / update (total_registered.education_level) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) РФ/мужчины 2</from>
|
||||
<to>Get variables 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) РФ/мужчины 2</from>
|
||||
<to>Insert / update (total_registered.education_level) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2</name>
|
||||
|
|
@ -95,39 +75,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2 2</name>
|
||||
<type>GetVariable</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>REC_ID</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>SCM</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1328</xloc>
|
||||
<yloc>880</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.education_level) 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
|
|
@ -232,110 +179,6 @@
|
|||
<yloc>496</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.education_level) 2 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<commit>100</commit>
|
||||
<connection>ervu-dashboard</connection>
|
||||
<lookup>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recruitment_id</field>
|
||||
<name>recruitment_id</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recording_date</field>
|
||||
<name>recording_date</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>"all_M_W"</field>
|
||||
<name>gender</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>education_level</table>
|
||||
<value>
|
||||
<name>higher</name>
|
||||
<rename>higher</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average</name>
|
||||
<rename>average_prof</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>only_general</name>
|
||||
<rename>only_general</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_data</name>
|
||||
<rename>count_nodata</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>higher_percent</name>
|
||||
<rename>higher_percentage</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>average_percent</name>
|
||||
<rename>average_prof_percentage</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>only_general_percent</name>
|
||||
<rename>only_general_percentage</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>no_data_percent</name>
|
||||
<rename>count_nodata_percentage</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>education_level</name>
|
||||
<rename>total</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>Y</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1728</xloc>
|
||||
<yloc>752</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
|
|
@ -390,60 +233,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<select_unspecified>N</select_unspecified>
|
||||
<meta>
|
||||
<name>REC_ID</name>
|
||||
<rename>REC_ID</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
<meta>
|
||||
<name>SCM</name>
|
||||
<rename>SCM</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1472</xloc>
|
||||
<yloc>880</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) РФ/мужчины</name>
|
||||
<type>TableInput</type>
|
||||
|
|
@ -462,11 +251,31 @@
|
|||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
last_status as (select recruit_id,
|
||||
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
|
||||
from recruits_history
|
||||
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
group by recruit_id
|
||||
),
|
||||
registered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
--and rh.source is not null
|
||||
),
|
||||
education_status AS (
|
||||
SELECT
|
||||
ri.id,
|
||||
r.target_recruitment_id AS recruitment_id,
|
||||
ri.recruit_id AS recruit_id,
|
||||
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
|
||||
r.gender,
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'ALL'
|
||||
END AS convicts,
|
||||
-- Высшее образование (российское или иностранное)
|
||||
(
|
||||
EXISTS (
|
||||
|
|
@ -532,36 +341,41 @@ education_status AS (
|
|||
)
|
||||
) 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 IN ('MALE','FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
|
||||
join public.recruits_history rh on rh.recruit_id=r.id
|
||||
WHERE
|
||||
r.gender IN ('MALE', 'FEMALE')
|
||||
AND r.id in (SELECT recruit_id FROM registered)
|
||||
AND rh.id in (SELECT recruit_history_id FROM registered)
|
||||
-- AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
|
||||
AND coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
),
|
||||
final_counts AS (
|
||||
SELECT
|
||||
es.gender,
|
||||
es.recruitment_id,
|
||||
es.convicts,
|
||||
COUNT(DISTINCT es.id) AS total,
|
||||
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
|
||||
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
|
||||
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
|
||||
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
|
||||
FROM education_status es
|
||||
GROUP BY es.recruitment_id, es.gender
|
||||
GROUP BY es.recruitment_id, es.gender, es.convicts
|
||||
),
|
||||
final_counts_all AS (
|
||||
SELECT
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
convicts,
|
||||
SUM(total) AS total,
|
||||
SUM(higher) AS higher,
|
||||
SUM(average_prof) AS average_prof,
|
||||
SUM(only_general) AS only_general,
|
||||
SUM(count_nodata) AS count_nodata
|
||||
FROM final_counts
|
||||
GROUP BY recruitment_id
|
||||
GROUP BY recruitment_id, convicts
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
|
|
@ -569,7 +383,7 @@ SELECT
|
|||
WHEN fc.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
'ALL' AS convicts,
|
||||
fc.convicts,
|
||||
fc.recruitment_id,
|
||||
fc.higher,
|
||||
fc.average_prof,
|
||||
|
|
@ -585,7 +399,7 @@ UNION ALL
|
|||
SELECT
|
||||
current_date AS recording_date,
|
||||
fca.gender,
|
||||
'ALL' AS convicts,
|
||||
fca.convicts,
|
||||
fca.recruitment_id,
|
||||
fca.higher,
|
||||
fca.average_prof,
|
||||
|
|
@ -604,183 +418,6 @@ FROM final_counts_all fca</sql>
|
|||
<yloc>496</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) РФ/мужчины 2</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>ervu_person_registry</connection>
|
||||
<execute_each_row>N</execute_each_row>
|
||||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
gender_separations AS (
|
||||
SELECT 'MALE' AS gender
|
||||
UNION ALL
|
||||
SELECT 'FEMALE' AS gender
|
||||
),
|
||||
data_combinations AS (
|
||||
SELECT
|
||||
i.recruitment_id AS recruitment_id,
|
||||
gs.gender
|
||||
FROM ids i
|
||||
CROSS JOIN gender_separations gs
|
||||
),
|
||||
education_status AS (
|
||||
SELECT
|
||||
ri.id,
|
||||
r.target_recruitment_id AS recruitment_id,
|
||||
r.gender,
|
||||
-- Высшее образование (российское или иностранное)
|
||||
(
|
||||
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'
|
||||
)
|
||||
) 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')
|
||||
)
|
||||
) AS has_only_general,
|
||||
|
||||
-- Нет данных об образовании (российское или иностранное)
|
||||
(
|
||||
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' OR r.gender = 'FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true' -- осужденные
|
||||
),
|
||||
final_counts AS (
|
||||
SELECT
|
||||
dc.gender,
|
||||
dc.recruitment_id,
|
||||
COUNT(DISTINCT es.id) AS total,
|
||||
COUNT(DISTINCT CASE WHEN es.has_higher THEN es.id END) AS higher,
|
||||
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND es.has_average_prof THEN es.id END) AS average_prof,
|
||||
COUNT(DISTINCT CASE WHEN NOT es.has_higher AND NOT es.has_average_prof AND es.has_only_general THEN es.id END) AS only_general,
|
||||
COUNT(DISTINCT CASE WHEN es.has_no_data THEN es.id END) AS count_nodata
|
||||
FROM data_combinations dc
|
||||
LEFT JOIN education_status es
|
||||
ON dc.recruitment_id = es.recruitment_id
|
||||
AND dc.gender = es.gender
|
||||
GROUP BY dc.recruitment_id, dc.gender
|
||||
),
|
||||
final_counts_all AS (
|
||||
SELECT
|
||||
'ALL' AS gender,
|
||||
recruitment_id,
|
||||
SUM(total) AS total,
|
||||
SUM(higher) AS higher,
|
||||
SUM(average_prof) AS average_prof,
|
||||
SUM(only_general) AS only_general,
|
||||
SUM(count_nodata) AS count_nodata
|
||||
FROM final_counts
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
CASE
|
||||
WHEN fc.gender = 'MALE' THEN 'M'
|
||||
WHEN fc.gender = 'FEMALE' THEN 'W'
|
||||
ELSE NULL
|
||||
END AS gender,
|
||||
'CONVICT' AS convicts,
|
||||
fc.recruitment_id,
|
||||
fc.higher,
|
||||
fc.average_prof,
|
||||
fc.only_general,
|
||||
fc.count_nodata,
|
||||
fc.total,
|
||||
COALESCE(ROUND(fc.higher * 100.0 / NULLIF(fc.total, 0), 2), 0) AS higher_percentage,
|
||||
COALESCE(ROUND(fc.average_prof * 100.0 / NULLIF(fc.total, 0), 2), 0) AS average_prof_percentage,
|
||||
COALESCE(ROUND(fc.only_general * 100.0 / NULLIF(fc.total, 0), 2), 0) AS only_general_percentage,
|
||||
COALESCE(ROUND(fc.count_nodata * 100.0 / NULLIF(fc.total, 0), 2), 0) AS count_nodata_percentage
|
||||
FROM final_counts fc
|
||||
UNION ALL
|
||||
SELECT
|
||||
current_date AS recording_date,
|
||||
fca.gender,
|
||||
'CONVICT' AS convicts,
|
||||
fca.recruitment_id,
|
||||
fca.higher,
|
||||
fca.average_prof,
|
||||
fca.only_general,
|
||||
fca.count_nodata,
|
||||
fca.total,
|
||||
COALESCE(ROUND(fca.higher * 100.0 / NULLIF(fca.total, 0), 2), 0) AS higher_percentage,
|
||||
COALESCE(ROUND(fca.average_prof * 100.0 / NULLIF(fca.total, 0), 2), 0) AS average_prof_percentage,
|
||||
COALESCE(ROUND(fca.only_general * 100.0 / NULLIF(fca.total, 0), 2), 0) AS only_general_percentage,
|
||||
COALESCE(ROUND(fca.count_nodata * 100.0 / NULLIF(fca.total, 0), 2), 0) AS count_nodata_percentage
|
||||
FROM final_counts_all fca</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1072</xloc>
|
||||
<yloc>752</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
</transform_error_handling>
|
||||
<attributes/>
|
||||
|
|
|
|||
|
|
@ -41,26 +41,6 @@
|
|||
<to>Insert / update (total_registered.marital_status) 2</to>
|
||||
<enabled>Y</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Get variables 3 2 2 2</from>
|
||||
<to>Select values 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Select values 3 2 2 2</from>
|
||||
<to>Insert / update (total_registered.marital_status) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) регионы/мужчины 2</from>
|
||||
<to>Get variables 3 2 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
<hop>
|
||||
<from>Table input (person_registry) регионы/мужчины 2</from>
|
||||
<to>Insert / update (total_registered.marital_status) 2 2</to>
|
||||
<enabled>N</enabled>
|
||||
</hop>
|
||||
</order>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2</name>
|
||||
|
|
@ -95,39 +75,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Get variables 3 2 2 2</name>
|
||||
<type>GetVariable</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>REC_ID</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
<field>
|
||||
<length>-1</length>
|
||||
<name>SCM</name>
|
||||
<precision>-1</precision>
|
||||
<trim_type>none</trim_type>
|
||||
<type>String</type>
|
||||
</field>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1280</xloc>
|
||||
<yloc>784</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.marital_status) 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
|
|
@ -222,100 +169,6 @@
|
|||
<yloc>544</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Insert / update (total_registered.marital_status) 2 2</name>
|
||||
<type>InsertUpdate</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<commit>100</commit>
|
||||
<connection>ervu-dashboard</connection>
|
||||
<lookup>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recruitment_id</field>
|
||||
<name>recruitment_id</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>recording_date</field>
|
||||
<name>recording_date</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>"all_M_W"</field>
|
||||
<name>gender</name>
|
||||
</key>
|
||||
<key>
|
||||
<condition>=</condition>
|
||||
<field>convicts</field>
|
||||
<name>convicts</name>
|
||||
</key>
|
||||
<schema>total_registered</schema>
|
||||
<table>marital_status</table>
|
||||
<value>
|
||||
<name>married</name>
|
||||
<rename>married</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_married</name>
|
||||
<rename>not_married</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>married_percent</name>
|
||||
<rename>married_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>not_married_percent</name>
|
||||
<rename>not_married_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>"all_M_W"</name>
|
||||
<rename>gender</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>recruitment_id</name>
|
||||
<rename>recruitment_id</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>marital_status</name>
|
||||
<rename>total</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other</name>
|
||||
<rename>other</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>other_percent</name>
|
||||
<rename>other_percent</rename>
|
||||
<update>Y</update>
|
||||
</value>
|
||||
<value>
|
||||
<name>convicts</name>
|
||||
<rename>convicts</rename>
|
||||
<update>N</update>
|
||||
</value>
|
||||
</lookup>
|
||||
<update_bypassed>Y</update_bypassed>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1680</xloc>
|
||||
<yloc>704</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
|
|
@ -370,60 +223,6 @@
|
|||
<yloc>624</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Select values 3 2 2 2</name>
|
||||
<type>SelectValues</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<fields>
|
||||
<select_unspecified>N</select_unspecified>
|
||||
<meta>
|
||||
<name>REC_ID</name>
|
||||
<rename>REC_ID</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
<meta>
|
||||
<name>SCM</name>
|
||||
<rename>SCM</rename>
|
||||
<type>String</type>
|
||||
<length>-2</length>
|
||||
<precision>-2</precision>
|
||||
<conversion_mask/>
|
||||
<date_format_lenient>false</date_format_lenient>
|
||||
<date_format_locale/>
|
||||
<date_format_timezone/>
|
||||
<lenient_string_to_number>false</lenient_string_to_number>
|
||||
<encoding/>
|
||||
<decimal_symbol/>
|
||||
<grouping_symbol/>
|
||||
<currency_symbol/>
|
||||
<storage_type/>
|
||||
</meta>
|
||||
</fields>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1424</xloc>
|
||||
<yloc>784</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) регионы/мужчины</name>
|
||||
<type>TableInput</type>
|
||||
|
|
@ -439,152 +238,68 @@
|
|||
<execute_each_row>N</execute_each_row>
|
||||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.info->'svedSemPolozh'->>'semPolozhNaim' AS sem_pol,
|
||||
r.gender,
|
||||
r.target_recruitment_id AS recruitment_id
|
||||
FROM public.recruits r
|
||||
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
),
|
||||
married_counts AS (
|
||||
-- Считаем значения для каждого гендера
|
||||
SELECT
|
||||
rd.recruitment_id,
|
||||
rd.gender,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol IN ('Вдова/Вдовец', 'В разводе', 'Вдовец', 'Холост')) AS not_married,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol = 'В браке') AS married,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol IS NULL OR rd.sem_pol = 'Отсутствуют сведения о семейном положении') AS other,
|
||||
COUNT(rd.recruitment_id) AS total
|
||||
FROM recruit_data rd
|
||||
GROUP BY rd.recruitment_id, rd.gender
|
||||
),
|
||||
all_counts AS (
|
||||
-- Считаем значения для ALL, суммируя данные по всем гендерам
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS gender,
|
||||
SUM(not_married) AS not_married,
|
||||
SUM(married) AS married,
|
||||
SUM(other) AS other,
|
||||
SUM(total) AS total
|
||||
FROM married_counts
|
||||
GROUP BY recruitment_id
|
||||
)
|
||||
-- Финальное объединение
|
||||
SELECT
|
||||
mc.not_married,
|
||||
mc.married,
|
||||
mc.total,
|
||||
mc.other,
|
||||
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
|
||||
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
|
||||
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
|
||||
CASE
|
||||
WHEN mc.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
current_date AS recording_date,
|
||||
'ALL' AS convicts,
|
||||
mc.recruitment_id
|
||||
FROM married_counts mc
|
||||
UNION ALL
|
||||
SELECT
|
||||
ac.not_married,
|
||||
ac.married,
|
||||
ac.total,
|
||||
ac.other,
|
||||
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
|
||||
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
|
||||
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
|
||||
ac.gender,
|
||||
current_date AS recording_date,
|
||||
'ALL' AS convicts,
|
||||
ac.recruitment_id
|
||||
FROM all_counts ac</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1040</xloc>
|
||||
<yloc>544</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform>
|
||||
<name>Table input (person_registry) регионы/мужчины 2</name>
|
||||
<type>TableInput</type>
|
||||
<description/>
|
||||
<distribute>Y</distribute>
|
||||
<custom_distribution/>
|
||||
<copies>1</copies>
|
||||
<partitioning>
|
||||
<method>none</method>
|
||||
<schema_name/>
|
||||
</partitioning>
|
||||
<connection>ervu_person_registry</connection>
|
||||
<execute_each_row>N</execute_each_row>
|
||||
<limit>0</limit>
|
||||
<sql>WITH
|
||||
ids AS (
|
||||
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
|
||||
),
|
||||
gender_separations AS (
|
||||
SELECT 'MALE' AS gender
|
||||
UNION ALL
|
||||
SELECT 'FEMALE' AS gender
|
||||
last_status as (select recruit_id,
|
||||
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
|
||||
from recruits_history
|
||||
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
group by recruit_id
|
||||
),
|
||||
data_combinations AS (
|
||||
SELECT
|
||||
i.recruitment_id AS recruitment_id,
|
||||
gs.gender
|
||||
FROM ids i
|
||||
CROSS JOIN gender_separations gs
|
||||
registered as (
|
||||
select
|
||||
distinct rh.recruit_id,
|
||||
rh.id as recruit_history_id
|
||||
from recruits_history rh
|
||||
join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
|
||||
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
|
||||
--and rh.source is not null
|
||||
),
|
||||
recruit_data AS (
|
||||
SELECT
|
||||
ri.info->'svedSemPolozh'->>'semPolozhNaim' AS sem_pol,
|
||||
r.gender,
|
||||
r.target_recruitment_id AS recruitment_id
|
||||
FROM public.recruits r
|
||||
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id
|
||||
WHERE r.vu_current_info->>'isMilitaryRegistered' = 'true'
|
||||
AND r.gender IN ('MALE', 'FEMALE')
|
||||
AND r.current_recruitment_id IS NOT NULL
|
||||
AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
|
||||
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
|
||||
CASE
|
||||
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
|
||||
ELSE 'ALL'
|
||||
END AS convicts,
|
||||
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id
|
||||
FROM public.recruits AS r
|
||||
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
|
||||
JOIN public.recruits_history rh on rh.recruit_id=r.id
|
||||
WHERE
|
||||
r.gender IN ('MALE', 'FEMALE')
|
||||
AND r.id in (SELECT recruit_id FROM registered)
|
||||
and rh.id in (SELECT recruit_history_id FROM registered)
|
||||
--and r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
|
||||
and coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
|
||||
),
|
||||
married_counts AS (
|
||||
-- Считаем значения для каждого гендера
|
||||
SELECT
|
||||
dc.recruitment_id,
|
||||
dc.gender,
|
||||
rd.recruitment_id,
|
||||
rd.gender,
|
||||
rd.convicts,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol IN ('Вдова/Вдовец', 'В разводе', 'Вдовец', 'Холост')) AS not_married,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol = 'В браке') AS married,
|
||||
COUNT(rd.recruitment_id) FILTER (WHERE rd.sem_pol IS NULL OR rd.sem_pol = 'Отсутствуют сведения о семейном положении') AS other,
|
||||
COUNT(rd.recruitment_id) AS total
|
||||
FROM data_combinations dc
|
||||
LEFT JOIN recruit_data rd
|
||||
ON rd.recruitment_id = dc.recruitment_id
|
||||
AND rd.gender = dc.gender
|
||||
GROUP BY dc.recruitment_id, dc.gender
|
||||
FROM recruit_data rd
|
||||
GROUP BY rd.recruitment_id, rd.gender, rd.convicts
|
||||
),
|
||||
all_counts AS (
|
||||
-- Считаем значения для ALL, суммируя данные по всем гендерам
|
||||
SELECT
|
||||
recruitment_id,
|
||||
'ALL' AS gender,
|
||||
convicts,
|
||||
SUM(not_married) AS not_married,
|
||||
SUM(married) AS married,
|
||||
SUM(other) AS other,
|
||||
SUM(total) AS total
|
||||
FROM married_counts
|
||||
GROUP BY recruitment_id
|
||||
GROUP BY recruitment_id, convicts
|
||||
)
|
||||
-- Финальное объединение
|
||||
SELECT
|
||||
|
|
@ -592,16 +307,15 @@ SELECT
|
|||
mc.married,
|
||||
mc.total,
|
||||
mc.other,
|
||||
mc.convicts,
|
||||
COALESCE(ROUND(mc.not_married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS not_married_percent,
|
||||
COALESCE(ROUND(mc.married * 100.0 / NULLIF(mc.total, 0), 2), 0) AS married_percent,
|
||||
COALESCE(ROUND(mc.other * 100.0 / NULLIF(mc.total, 0), 2), 0) AS other_percent,
|
||||
CASE
|
||||
WHEN mc.gender = 'MALE' THEN 'M'
|
||||
WHEN mc.gender = 'FEMALE' THEN 'W'
|
||||
ELSE NULL
|
||||
WHEN mc.gender = 'MALE' THEN 'M'
|
||||
ELSE 'W'
|
||||
END AS gender,
|
||||
current_date AS recording_date,
|
||||
'CONVICT' AS convicts,
|
||||
mc.recruitment_id
|
||||
FROM married_counts mc
|
||||
UNION ALL
|
||||
|
|
@ -610,19 +324,19 @@ SELECT
|
|||
ac.married,
|
||||
ac.total,
|
||||
ac.other,
|
||||
ac.convicts,
|
||||
COALESCE(ROUND(ac.not_married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS not_married_percent,
|
||||
COALESCE(ROUND(ac.married * 100.0 / NULLIF(ac.total, 0), 2), 0) AS married_percent,
|
||||
COALESCE(ROUND(ac.other * 100.0 / NULLIF(ac.total, 0), 2), 0) AS other_percent,
|
||||
ac.gender,
|
||||
current_date AS recording_date,
|
||||
'CONVICT' AS convicts,
|
||||
ac.recruitment_id
|
||||
FROM all_counts ac;</sql>
|
||||
<variables_active>Y</variables_active>
|
||||
<attributes/>
|
||||
<GUI>
|
||||
<xloc>1040</xloc>
|
||||
<yloc>704</yloc>
|
||||
<yloc>544</yloc>
|
||||
</GUI>
|
||||
</transform>
|
||||
<transform_error_handling>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue