LIKE: uma coligação tipo assim

PT coligado com MDB é possível depois de tudo o que houve? A pergunta é simples: nas eleições de 2018, em quais estados o PT se coligou ao MDB?

Para responder essa questão, vamos usar a base de dados de candidatos das eleições 2018 disponibilizada pelo TSE. A base prontinha tá aqui.

Na tabela candidatos2018, o que nos interessa é a coluna “ds_composicao_coligacao” que descreve a coligação. Vamos ver como é a cara de uma coligação:

SELECT ds_composicao_coligacao FROM candidatos2018 limit 5;
PSD / MDB
PSOL / PV / PRP / PPL
PSDB / DEM
PT / PC do B
PSOL / PV / PRP / PPL

OK. Agora… vamos ver logo todas as coligações existentes:

SELECT distinct ds_composicao_coligacao FROM candidatos2018;

Vixe! Muita coisa! Afinal… de quantas maneiras é possível combinar os partidos no Brasil? Vamos ver quantas coligações diferentes aconteceram:

SELECT count(distinct ds_composicao_coligacao) FROM candidatos2018;
423

Aliás… quantos partidos participaram mesmo da eleição?

SELECT count(distinct sg_partido) FROM candidatos2018;
35

Ou seja, com 35 partidos chegamos a 423 diferentes coligações!!!

E agora… como achar as coligações das quais o PT participou? Uma ideia é usar o LIKE. Podemos encontrar todas as coligações que contenham o termo “PT”. A condição com o LIKE ficaria assim: ds_composicao_coligacao LIKE ‘%PT%’, onde o ‘%’ é um símbolo coringa. A gente lê assim “ds_composicao_coligacao é um texto que começa com qualquer coisa, depois aparece PT e depois termina com qualquer coisa”. Bom, o comando fica então:

SELECT distinct ds_composicao_coligacao FROM candidatos2018
WHERE ds_composicao_coligacao LIKE '%PT%';
PT / PC do B
PP / PMN / PPS / PTC / PR
PT / PSB / PHS / PC do B / DC
PP / PSDB / PSD / MDB / DEM / SOLIDARIEDADE / PTC / PMN / PR / PTB / PPS
PTB
...

Isso resulta em bastante coisa. Mas dá pra perceber um problema… veja, por exemplo, a coligação “PP / PMN / PPS / PTC / PR”. Ela tem o termo “PT” por causa do “PTC”, mas não nos interessa! Vamos nos aproveitar dos espaço em torno dos partidos para sermos mais precisos. O que buscamos agora é “espaço, PT, espaço” no meio do texto:

SELECT distinct ds_composicao_coligacao FROM candidatos2018
WHERE ds_composicao_coligacao LIKE '% PT %';
PRB / PDT / PT / PODE / PROS / PC do B / PSB / PV / PSOL / PHS / PRTB / DC / PPL / PMB
MDB / PPS / PDT / PR / PTB / PT / PRTB / PODE / PRP / PSD / PMN / AVANTE
MDB / PODE / PPS / PDT / PR / PTB / PHS / PV / PT / PRP / PRTB / PSD / DC / PC do B / AVANTE / SOLIDARIEDADE / PMN
PC do B / PRB / PDT / PPS / DEM / PSB / PR / PP / PROS / PT / PTB / PATRI / PTC / SOLIDARIEDADE / PPL / AVANTE
PR / PRB / PT / PC do B
...

Opa, legal, pouca coisa! Podemos até ver no olho… mas, calma! Volte ao resultado do comando anterior e perceberá que tá faltando coligações como a “PT / PC do B”. É que a gente pediu só pelas coligações com PT no meio… precisamos de PT no começo… e também PT no fim! Quando a gente faz ds_composicao_coligacao LIKE ‘PT %’ queremos uma coligação que começa com PT e depois pode ter qualquer coisa. Quando a gente faz ds_composicao_coligacao LIKE ‘%PT’ queremos uma coligação que começa com qualquer coisa e que termine com PT. Então para ver todas as coligações do PT:

SELECT distinct ds_composicao_coligacao FROM candidatos2018
WHERE ds_composicao_coligacao LIKE '% PT %'
OR ds_composicao_coligacao LIKE 'PT %'
OR ds_composicao_coligacao LIKE '%PT';
PT / PC do B
PT / PSB / PHS / PC do B / DC
PRB / PDT / PT / PODE / PROS / PC do B / PSB / PV / PSOL / PHS / PRTB / DC / PPL / PMB
PT / PV / PC do B
MDB / PPS / PDT / PR / PTB / PT / PRTB / PODE / PRP / PSD / PMN / AVANTE
...

Agora sim! Temos 37 coligações envolvendo o PT. Mas não sabemos em que estados essas coligações aconteceram. Precisamos de todas as combinações existentes de “UF X coligação”. A gente faz isso com o DISTINCT envolvendo as duas colunas em questão.

SELECT distinct sg_uf, ds_composicao_coligacao FROM candidatos2018
WHERE ds_composicao_coligacao LIKE '% PT %'
OR ds_composicao_coligacao LIKE 'PT %'
OR ds_composicao_coligacao LIKE '%PT';
AC|PT / PC do B
AC|PT / PSB / PHS / PC do B / DC
AC|PRB / PDT / PT / PODE / PROS / PC do B / PSB / PV / PSOL / PHS / PRTB / DC / PPL / PMB
AL|PT / PV / PC do B
...

Temos agora 80 combinações de UF x coligação. Isso acontece porque algumas coligações se repetem em diferentes estados e porque no mesmo estado podem haver coligações diferentes envolvendo o mesmo partido, já que cada cargo pleiteado possibilita uma coligação diferente! Para ver isso:

SELECT distinct sg_uf, ds_cargo, ds_composicao_coligacao FROM candidatos2018
WHERE ds_composicao_coligacao LIKE '% PT %'
OR ds_composicao_coligacao LIKE 'PT %'
OR ds_composicao_coligacao LIKE '%PT';
AC|Deputado Estadual|PT / PC do B
AC|Deputado Federal|PT / PSB / PHS / PC do B / DC
AC|Senador|PRB / PDT / PT / PODE / PROS / PC do B / PSB / PV / PSOL / PHS / PRTB / DC / PPL / PMB
AC|Governador|PRB / PDT / PT / PODE / PROS / PC do B / PSB / PV / PSOL / PHS / PRTB / DC / PPL / PMB
...

Bom, agora que já temos todas as coligações com o PT não é difícil ver todas as coligações que tenham tanto o PT quanto o MDB. Queremos todas as coligações que sejam “tipo PT” e “tipo MDB”:

SELECT distinct sg_uf, ds_composicao_coligacao FROM candidatos2018
WHERE (ds_composicao_coligacao LIKE '% PT %'
  OR ds_composicao_coligacao LIKE 'PT %'
  OR ds_composicao_coligacao LIKE '%PT') 
AND (ds_composicao_coligacao LIKE '% MDB %'
  OR ds_composicao_coligacao LIKE 'MDB %'
  OR ds_composicao_coligacao LIKE '%MDB') ;
PE|PSB / PC do B / PT / MDB / PP / PR / PMN / PTC / PRP / PATRI / PSD / PPL / SOLIDARIEDADE
PI|PT / MDB / PP / PR / PDT / PSD / PC do B / PTB / PRTB
PI|MDB / PP / PTB / PC do B / PR / PDT / PSD / PT
SE|PP / MDB / DC / PC do B / PSD / PT / PHS

Resposta final: o PT se coligou ao MDB nos seguintes estados: PE, PI e SE. Pronto, agora você já sabe para onde enviar seus repórteres =)

Deixe um comentário