diff --git a/idm.sql b/idm.sql index 6f4177ac1310a8984f231b0f23d4307b57604f6b..212f53a89d34c789420815472008f39268fbb4ce 100644 --- a/idm.sql +++ b/idm.sql @@ -23,31 +23,80 @@ along with HOTMapper. If not, see <https://www.gnu.org/licenses/>. CREATE TABLE indice_distribuicao_matriculas AS ( - WITH div_estado AS (SELECT count(serie_ano_id) AS total_estado, serie_ano_id, estado_id - FROM matricula - WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_id <=3 - GROUP BY serie_ano_id, estado_id), + WITH div_estado AS + (SELECT count(serie_ano_id) AS total_estado, serie_ano_id, estado_id, ano_censo, localizacao_id + FROM matricula + WHERE ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_id <=3 + GROUP BY serie_ano_id, estado_id, ano_censo, localizacao_id), + + div_estado_mod AS + (SELECT count(serie_ano_id) AS total_estado_mod, cast(LEFT(serie_ano_id, 1) as integer) as serie_mod, estado_id, + ano_censo, localizacao_id + FROM matricula + WHERE ano_censo >= 2017 AND tipo <= 3 AND dependencia_adm_id <= 3 + GROUP BY serie_mod, estado_id, ano_censo, localizacao_id), - div_brasil AS (SELECT sum(total_estado) AS total_brasil, serie_ano_id - FROM div_estado - GROUP BY serie_ano_id), + div_brasil AS + (SELECT sum(total_estado) AS total_brasil, serie_ano_id, ano_censo, localizacao_id + FROM div_estado + GROUP BY serie_ano_id, ano_censo, localizacao_id), + + div_brasil_mod AS + (SELECT sum(total_brasil) AS total_brasil_mod, cast(LEFT(serie_ano_id, 1) as integer) as serie_mod, ano_censo, localizacao_id + FROM div_brasil + GROUP BY serie_mod, ano_censo, localizacao_id), nivel_sim1 AS - (SELECT ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_brasil AS total_etapa, - cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 1 AS nivel_simulacao + (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_brasil AS total_etapa, + cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 1 AS nivel_simulacao, + matricula.localizacao_id FROM matricula JOIN div_brasil ON matricula.serie_ano_id=div_brasil.serie_ano_id - WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 - GROUP BY ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa), + AND matricula.ano_censo=div_brasil.ano_censo + AND matricula.localizacao_id=div_brasil.localizacao_id + WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 + GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa, + matricula.localizacao_id), nivel_sim2 AS - (SELECT ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_estado AS total_etapa, - cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 2 AS nivel_simulacao - FROM matricula JOIN div_estado ON - matricula.serie_ano_id=div_estado.serie_ano_id AND matricula.estado_id=div_estado.estado_id - WHERE ano_censo=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 - GROUP BY ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa) - + (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_estado AS total_etapa, + cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, 2 AS nivel_simulacao, + matricula.localizacao_id + FROM matricula JOIN div_estado ON matricula.serie_ano_id=div_estado.serie_ano_id + AND matricula.estado_id=div_estado.estado_id + AND matricula.ano_censo=div_estado.ano_censo + AND matricula.localizacao_id=div_estado.localizacao_id + WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 + GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa, + matricula.localizacao_id), + + nivel_sim1_mod AS + (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod as serie_ano_id, + total_brasil_mod AS total_etapa, cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, + 1 AS nivel_simulacao, matricula.localizacao_id + FROM matricula JOIN div_brasil_mod ON LEFT(matricula.serie_ano_id, 1)=div_brasil_mod.serie_mod + AND matricula.ano_censo=div_brasil_mod.ano_censo + AND matricula.localizacao_id=div_brasil_mod.localizacao_id + WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 + GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa, + matricula.localizacao_id), + + nivel_sim2_mod AS + (SELECT matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod as serie_ano_id, + total_estado_mod AS total_etapa, cast(count(matricula.serie_ano_id) AS double)/total_etapa AS indice, + 2 AS nivel_simulacao, matricula.localizacao_id + FROM matricula JOIN div_estado_mod ON LEFT(matricula.serie_ano_id, 1)=div_estado_mod.serie_mod + AND matricula.estado_id=div_estado_mod.estado_id + AND matricula.ano_censo=div_estado_mod.ano_censo + AND matricula.localizacao_id=div_estado_mod.localizacao_id + WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3 + GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa, + matricula.localizacao_id) + SELECT * FROM nivel_sim1 UNION ALL SELECT * FROM nivel_sim2 +UNION ALL +SELECT * FROM nivel_sim1_mod +UNION ALL +SELECT * FROM nivel_sim2_mod );