nadeenibrahim
8/23/2018 - 4:49 PM

Positions core and non-core subrole counts

select subrole.job_id
  , sum(case when subrole.core = 'Core' then 1 else 0 end) as core_count
  , sum(case when subrole.core = 'Non-Core' then 1 else 0 end) as non_core_count
from (
    select subroles.job_id
      , subroles.subrole_id
      , subroles.subrole_input_type
      , roles.name as subrole
      , case when roles.core = true then 'Core'
          when roles.core = false then 'Non-Core'
          else null
        end as core
    from (
    	select subroles_crossed.job_id as job_id
        	, case when subroles_explicit.job_id::numeric is not null then subroles_crossed.explicit_subrole::numeric
              else subroles_crossed.inferred_subrole::numeric
              end as subrole_id
            , case when subroles_explicit.job_id is not null then 'explicit'
              else 'inferred'
                end as subrole_input_type
		from (
			select case when s.job_id::numeric is null then j.job_id::numeric
			  else s.job_id::numeric
			  end as job_id
				, j.role_id:: numeric as explicit_subrole
				, s.subrole_id::numeric as inferred_subrole
			from jobs
			left join jobs_roles j -- explicit
				on jobs.id= j.job_id
			left join jobs_with_subroles_using_skills s -- implicit
				on jobs.id = s.job_id
		) as subroles_crossed
		left join (
			select job_id
				, count(*)
			from jobs_roles
			group by 1
		) as subroles_explicit
			on subroles_crossed.job_id = subroles_explicit.job_id
    ) as subroles
    left join roles
      on subroles.subrole_id = roles.id
    group by 1,2,3,4,5
) as subrole
group by 1