El presente documento contiene el código fuente de SQL utilizado para la consulta de datos a la base sobre financiamiento electoral privado a partidos políticos en Costa Rica, en el periodo setiembre 2009- diciembre 2018, del Tribunal Supremo de Elecciones, para la elaboración del artículo: Grandes donantes dinero, élites y partidos políticos en Costa Rica (2010-2018)
#install.packages("odbc")
#install.packages("DBI")
library(odbc)
library(DBI)
library(readxl)
library(tidyverse)
# instalar los siguientes paquetes para ejecutar código SQL en EL ENTORNO DE RStudio.
Importar los datos, del excel BBDD_Financiamiento Privado del TSE.
BBDD <- read_excel(“C:rutadelarchivo.xlsx”)
#create database
<- dbConnect(drv = RSQLite::SQLite(),
con dbname = ":memory:")
#store sample data in database
dbWriteTable(conn = con,
name = "BBDD",
value = BBDD)
#remove the local data from the environment
#rm(BBDD)
Código SQL
SELECT -- (SELECT MANDATORIO) consulte la columna partido político del subquery A
A.[PARTIDO POLÍTICO]SUM(A.MONTO) AS SumaColones -- sume todos los montos y llamelo SumaColones
,SUM(A.MONTO) /534.32) AS dolarizado -- para dolarizar, a la suma de esos montos dividala por el tipo de cambio promerio para ese periodo
,(FROM -- haga la consulta al siguiente conjunto de datos (desde)
(SELECT -- las columnas [PARTIDO POLÍTICO] y ,MONTO
[PARTIDO POLÍTICO]
,MONTOFROM --desde la tabla DBO.BBDD
BBDDWHERE -- donde la variable [PARTIDO POLÍTICO] sea igual a 'LIBERACION NACIONAL' o a 'UNIDAD SOCIAL CRISTIANA'...
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A -- este conjunto de datos que excluye a todos los otros partidos llamele subquery A
)
GROUP BY
-- me agrupa el resultado del SELECT MANDATORIO por partido político
A.[PARTIDO POLÍTICO] ORDER BY
SUM(A.MONTO) ASC
PARTIDO POLÍTICO | SumaColones | dolarizado |
---|---|---|
RESTAURACION NACIONAL | 155947532 | 291861.7 |
UNIDAD SOCIAL CRISTIANA | 536042420 | 1003223.6 |
FRENTE AMPLIO | 543324097 | 1016851.5 |
MOVIMIENTO LIBERTARIO | 691121149 | 1293459.3 |
ACCION CIUDADANA | 833463173 | 1559857.7 |
LIBERACION NACIONAL | 4857523062 | 9091037.3 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO] AS colones
, A.Suma /534.32) AS dolarizado
, (A.Suma FROM --desde subquery A (conjunto de datos unicamente con los partidos de interés)
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima --Asigne una secuencia numerica a cada grupo particionado por cedula
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma -- sume todos los montos por cedula y ordene segun la fecha del monto
, FROM BBDD -- desde tabla BBDD
WHERE -- donde [PARTIDO POLÍTICO] sea igual a los siguientes partidos
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A -- llamele al conjunto de datos A
)
WHERE -- que el resultado del select mandatorio sea igual unicamente a Liberacin Nacional
= 'LIBERACION NACIONAL'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1 -- y de la secuencia muestre el valor 1 (para sacar el máximo de la suma de todos los montos)
ORDER BY A.Suma DESC -- ordene el resultado del select mandatorio según la suma de forma descendenete para obtener el mayor monto
PARTIDO POLÍTICO | colones | dolarizado |
---|---|---|
LIBERACION NACIONAL | 931301810 | 1742966.4 |
LIBERACION NACIONAL | 366176024 | 685312.2 |
LIBERACION NACIONAL | 149678564 | 280129.1 |
LIBERACION NACIONAL | 142550875 | 266789.3 |
LIBERACION NACIONAL | 82683207 | 154744.7 |
LIBERACION NACIONAL | 78784000 | 147447.2 |
LIBERACION NACIONAL | 58132000 | 108796.2 |
LIBERACION NACIONAL | 56480000 | 105704.4 |
LIBERACION NACIONAL | 55361000 | 103610.2 |
LIBERACION NACIONAL | 55300000 | 103496.0 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]AS Colones
, A.Suma /534.32) AS dolarizado
,(A.Suma FROM
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
, FROM BBDD
WHERE
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A
)
WHERE
= 'ACCION CIUDADANA'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC
PARTIDO POLÍTICO | Colones | dolarizado |
---|---|---|
ACCION CIUDADANA | 217385000 | 406844.21 |
ACCION CIUDADANA | 13024224 | 24375.33 |
ACCION CIUDADANA | 11497055 | 21517.17 |
ACCION CIUDADANA | 11030331 | 20643.68 |
ACCION CIUDADANA | 10066650 | 18840.11 |
ACCION CIUDADANA | 8230039 | 15402.83 |
ACCION CIUDADANA | 7937614 | 14855.54 |
ACCION CIUDADANA | 7893019 | 14772.08 |
ACCION CIUDADANA | 7691170 | 14394.31 |
ACCION CIUDADANA | 7685129 | 14383.01 |
Montos recibidos entre setiembre 2009 y diciembre 2018. Para este partido como se trabajó con personas físicas y el segundo lugar correspondió a una persona jurpidica, se toma el top 31 para excluir la personería jurpidica en el análisis final.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]AS Colones
, A.Suma /534.32) AS dolarizado
,(A.Suma FROM
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
, FROM BBDD
WHERE
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A
)
WHERE
= 'UNIDAD SOCIAL CRISTIANA'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC
PARTIDO POLÍTICO | Colones | dolarizado |
---|---|---|
UNIDAD SOCIAL CRISTIANA | 73398137 | 137367.38 |
UNIDAD SOCIAL CRISTIANA | 47736527 | 89340.71 |
UNIDAD SOCIAL CRISTIANA | 35240000 | 65952.99 |
UNIDAD SOCIAL CRISTIANA | 31600000 | 59140.59 |
UNIDAD SOCIAL CRISTIANA | 22439000 | 41995.43 |
UNIDAD SOCIAL CRISTIANA | 18502800 | 34628.69 |
UNIDAD SOCIAL CRISTIANA | 16807796 | 31456.42 |
UNIDAD SOCIAL CRISTIANA | 8879321 | 16617.98 |
UNIDAD SOCIAL CRISTIANA | 8321667 | 15574.31 |
UNIDAD SOCIAL CRISTIANA | 8197000 | 15340.99 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]AS Colones
, A.Suma /534.32) AS dolarizado
,(A.Suma FROM
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
, FROM BBDD
WHERE
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A
)
WHERE
= 'MOVIMIENTO LIBERTARIO'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC
PARTIDO POLÍTICO | Colones | dolarizado |
---|---|---|
MOVIMIENTO LIBERTARIO | 75265993 | 140863.14 |
MOVIMIENTO LIBERTARIO | 37047964 | 69336.66 |
MOVIMIENTO LIBERTARIO | 28050000 | 52496.63 |
MOVIMIENTO LIBERTARIO | 25830600 | 48342.94 |
MOVIMIENTO LIBERTARIO | 20837780 | 38998.69 |
MOVIMIENTO LIBERTARIO | 16330000 | 30562.21 |
MOVIMIENTO LIBERTARIO | 12650000 | 23674.95 |
MOVIMIENTO LIBERTARIO | 9520000 | 17817.04 |
MOVIMIENTO LIBERTARIO | 8495000 | 15898.71 |
MOVIMIENTO LIBERTARIO | 7676700 | 14367.23 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]AS Colones
, A.Suma /534.32) AS dolarizado
,(A.Suma FROM
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
, FROM BBDD
WHERE
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A
)
WHERE
= 'FRENTE AMPLIO'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC
PARTIDO POLÍTICO | Colones | dolarizado |
---|---|---|
FRENTE AMPLIO | 53609000 | 100331.26 |
FRENTE AMPLIO | 45245578 | 84678.80 |
FRENTE AMPLIO | 33248050 | 62224.98 |
FRENTE AMPLIO | 27445600 | 51365.47 |
FRENTE AMPLIO | 26008500 | 48675.89 |
FRENTE AMPLIO | 25234062 | 47226.50 |
FRENTE AMPLIO | 25000000 | 46788.44 |
FRENTE AMPLIO | 24361000 | 45592.53 |
FRENTE AMPLIO | 21958500 | 41096.16 |
FRENTE AMPLIO | 21675000 | 40565.58 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]AS Colones
, A.Suma /534.32) AS dolarizado
,(A.Suma FROM
(SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTOROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
, FROM BBDD
WHERE
= 'LIBERACION NACIONAL'
[PARTIDO POLÍTICO] OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AS A
)
WHERE
= 'RESTAURACION NACIONAL'
A.[PARTIDO POLÍTICO] AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC
PARTIDO POLÍTICO | Colones | dolarizado |
---|---|---|
RESTAURACION NACIONAL | 11728900 | 21951.078 |
RESTAURACION NACIONAL | 11677415 | 21854.721 |
RESTAURACION NACIONAL | 10200000 | 19089.684 |
RESTAURACION NACIONAL | 9736525 | 18222.273 |
RESTAURACION NACIONAL | 9733000 | 18215.676 |
RESTAURACION NACIONAL | 9625000 | 18013.550 |
RESTAURACION NACIONAL | 4720576 | 8834.736 |
RESTAURACION NACIONAL | 4550000 | 8515.496 |
RESTAURACION NACIONAL | 4500000 | 8421.919 |
RESTAURACION NACIONAL | 3850000 | 7205.420 |
Para obtener el top 10, dado que algunas cédulas estaban registradas con 0, (INCONSISTENT) estas se posicionan en la primera poscisión y se toma los siguientes 10 contribuyentes con 3 o más partidos distintos.
Código SQL
SELECT -- consulte la cedula y el nombre y haga un conteo distinto de los partidos politicos
[CÉDULA]COUNT(DISTINCT [PARTIDO POLÍTICO]) AS CONTEOPARTIDODISTINTO
,FROM -- desde la tabla
BBDDWHERE
= 'NACIONAL' -- solo partidos de escala nacional
[ESCALA] GROUP BY -- agrupelo por cedula y por nombre
[CÉDULA]ORDER BY -- ordene la consulta por el resultado del conteo distinto de forma descendente para obtener a quien tenga más partidos distintos.
COUNT(DISTINCT [PARTIDO POLÍTICO]) DESC
CÉDULA | CONTEOPARTIDODISTINTO |
---|---|
0 | 7 |
104620192 | 6 |
900420144 | 4 |
900610047 | 3 |
900400076 | 3 |
601150376 | 3 |
109780599 | 3 |
107580258 | 3 |
106440138 | 3 |
104750144 | 3 |