Calculando juros com SQL
Neste artigo vamos ver alguns exemplos de como calcular juros simples e calcular juros compostos, utilizando o SQL Server e o MySQL.
Juros é o rendimento que se obtém quando se empresta dinheiro por um determinado período.
Vamos ver duas formas de calcular juros, o juros simples e o juros composto. O juros é considerado simples quando a taxa de juros é definida a partir do valor inicial do empréstimo.
Já no sistema de juros composto, se define um percentual de taxa de juros de acordo com cada período, sendo este novo valor adicionado ao valor inicial para que seja feito um novo cálculo no período seguinte. Isto também recebe o nome de juros sobre juros.
Vamos começar com o juros simples. Primeiro, vamos criar uma tabela para guardar valores, a taxa de juros e a quantidade de meses.
//MySQL
CREATE TABLE IF NOT EXISTS `juros` (
`id` int(11) NOT NULL,
`valor` float NOT NULL,
`meses` int(11) NOT NULL,
`juros_mes` float NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
//SQL SERVER
CREATE TABLE [dbo].[juros](
[id] [int] IDENTITY(1,1) NOT NULL,
[valor] [float] NULL,
[meses] [int] NULL,
[juros_mes] [float] NULL,
CONSTRAINT [PK_juros] PRIMARY KEY CLUSTERED
([id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
Depois de criar as tabelas, vamos inserir alguns registros.
insert into juros (valor, meses, juros_mes) values (10000, 10, 10);
insert into juros (valor, meses, juros_mes) values (15000, 18, 0.78);
insert into juros (valor, meses, juros_mes) values (25000, 24, 5.78);
insert into juros (valor, meses, juros_mes) values (35000, 24, 7);
insert into juros (valor, meses, juros_mes) values (18000, 36, 13);
insert into juros (valor, meses, juros_mes) values (12000, 36, 11.5);
Para calcular os juros simples, podemos fazer esta consulta
select valor, meses, juros_mes, (valor * (juros_mes/100) * meses) as juros_simples from juros
Para saber o valor final (valor inicial + juros de todos os períodos), podemos fazer desta forma:
select valor, meses, juros_mes, (valor * (juros_mes/100) * meses) as juros_simples, valor + (valor * (juros_mes/100) * meses) as total_com_juros_simples from juros
Utilizando a mesma tabela, vamos fazer o cálculo dos juros compostos. Utilizando a função POWER, podemos elevar o juros de cada período a uma determinada potência, que será a quantidade de meses desejada.
SELECT valor,
meses,
(valor * POWER(1 + (juros_mes / 100), meses)) - valor AS juros,
valor * POWER(1 + (juros_mes / 100), meses) AS total_com_juros_compostos
from juros
Agora vamos ver outro tipo de cálculo, a seguir vamos fazer o cálculo da inflação acumulada num determinado período.
Inflação refere-se a um aumento contínuo e generalizado dos preços em uma economia.
No exemplo a seguir, vamos ver como calcular a inflação acumulada de um determinado período, para isso, vamos utilizar o índice IPC de inflação do Brasil, medida desde o ano 2000 até 2019. Primeiro, vamos criar uma tabela para guardar estas informações.
//MYSQL
CREATE TABLE IF NOT EXISTS `inflacao` (
`id` int(11) NOT NULL,
`ano` int(11) NOT NULL,
`valor` float NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
//SQL SERVER
CREATE TABLE [dbo].[inflacao](
[id] [int] IDENTITY(1,1) NOT NULL,
[ano] [int] NULL,
[valor] [float] NULL,
CONSTRAINT [PK_inflacao] PRIMARY KEY CLUSTERED
([id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
Depois de criar a tabela, vamos adicionar a inflação do período.
INSERT INTO inflacao (ano, valor) VALUES (2019,4.31);
INSERT INTO inflacao (ano, valor) VALUES (2018,3.75);
INSERT INTO inflacao (ano, valor) VALUES (2017,2.95);
INSERT INTO inflacao (ano, valor) VALUES (2016,6.29);
INSERT INTO inflacao (ano, valor) VALUES (2015,10.67);
INSERT INTO inflacao (ano, valor) VALUES (2014,6.41);
INSERT INTO inflacao (ano, valor) VALUES (2013,5.91);
INSERT INTO inflacao (ano, valor) VALUES (2012,5.84);
INSERT INTO inflacao (ano, valor) VALUES (2011,6.50);
INSERT INTO inflacao (ano, valor) VALUES (2010,5.91);
INSERT INTO inflacao (ano, valor) VALUES (2009,4.31);
INSERT INTO inflacao (ano, valor) VALUES (2008,5.90);
INSERT INTO inflacao (ano, valor) VALUES (2007,4.46);
INSERT INTO inflacao (ano, valor) VALUES (2006,3.14);
INSERT INTO inflacao (ano, valor) VALUES (2005,5.69);
INSERT INTO inflacao (ano, valor) VALUES (2004,7.60);
INSERT INTO inflacao (ano, valor) VALUES (2003,9.30);
INSERT INTO inflacao (ano, valor) VALUES (2002,12.53);
INSERT INTO inflacao (ano, valor) VALUES (2001,7.67);
INSERT INTO inflacao (ano, valor) VALUES (2000,5.97);
Para calcular a inflação acumulada ano a ano, vamos utilizar a seguinte consulta:
select i1.ano, i1.valor, (EXP(SUM(LOG(1+(i2.valor/100)))) -1)*100 as acumulado
from inflacao I1
inner join inflacao I2 on i1.ano >=i2.ano
group by i1.ano, i1.valor
order by i1.ano, i1.valor
Perceba que neste exemplo utilizamos duas funções matemáticas, primeiro fizemos a soma dos logaritmos (LOG) dos valores acumulados em cada ano. Sobre este resultado, fizemos a exponenciação. Utilizando as funções de logaritmo e exponenciação, é possível obter as taxas de juros de forma acumulada.