Subtraindo valores numéricos
Subtrair valores numéricos em SQL é simples. O operador - é usado para subtração, assim como em outras linguagens de programação.
Subtraindo colunas de uma tabela
Suponha que você tenha uma tabela chamada sales que armazena os valores de vendas reais e projetados:
CREATE TABLE sales (
id INT PRIMARY KEY,
actual_sales DECIMAL(10, 2),
projected_sales DECIMAL(10, 2)
);
INSERT INTO sales (id, actual_sales, projected_sales)
VALUES
(1, 1000.00, 1200.00),
(2, 1500.00, 1500.00),
(3, 1300.00, 1250.00);
Para calcular a diferença entre as vendas reais e as projetadas, você pode escrever a seguinte query:
SELECT
id,
actual_sales,
projected_sales,
actual_sales - projected_sales AS difference
FROM
sales;
Saída esperada:
+----+--------------+-----------------+------------+
| id | actual_sales | projected_sales | difference |
+----+--------------+-----------------+------------+
| 1 | 1000.00 | 1200.00 | -200.00 |
| 2 | 1500.00 | 1500.00 | 0.00 |
| 3 | 1300.00 | 1250.00 | 50.00 |
+----+--------------+-----------------+------------+
3 rows in set (0.00 sec)
Subtraindo datas em SQL
O SQL também permite subtrair datas para obter a diferença em dias, meses ou anos, dependendo do sistema de banco de dados que você usa.
Subtraindo datas no MySQL
Considere uma tabela employees com as colunas start_date e end_date:
CREATE TABLE employees (
id INT PRIMARY KEY,
start_date DATE,
end_date DATE
);
INSERT INTO employees (id, start_date, end_date)
VALUES
(1, '2023-01-01', '2023-08-01'),
(2, '2022-05-15', '2023-05-15'),
(3, '2023-03-01', '2023-03-31');
Para calcular a diferença em dias entre end_date e start_date, você pode usar a função DATEDIFF:
SELECT
id,
start_date,
end_date,
DATEDIFF(end_date, start_date) AS days_difference
FROM
employees;
Saída esperada:
+----+------------+------------+-----------------+
| id | start_date | end_date | days_difference |
+----+------------+------------+-----------------+
| 1 | 2023-01-01 | 2023-08-01 | 212 |
| 2 | 2022-05-15 | 2023-05-15 | 365 |
| 3 | 2023-03-01 | 2023-03-31 | 30 |
+----+------------+------------+-----------------+
3 rows in set (0.01 sec)
Subtraindo timestamps
Subtrair timestamps é útil quando você precisa calcular diferenças de tempo em segundos, minutos, horas etc.
Subtraindo timestamps no PostgreSQL
Suponha que você tenha uma tabela logs que armazena os timestamps de início e fim de um evento:
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
start_time TIMESTAMP,
end_time TIMESTAMP
);
INSERT INTO logs (start_time, end_time)
VALUES
('2023-08-01 10:00:00', '2023-08-01 12:00:00'),
('2023-08-02 09:15:00', '2023-08-02 10:45:00');
Para calcular a diferença em horas entre end_time e start_time, você pode usar a função EXTRACT:
SELECT
id,
start_time,
end_time,
EXTRACT(EPOCH FROM end_time - start_time) / 3600 AS hours_difference
FROM
logs;
Saída esperada:
id | start_time | end_time | hours_difference
----+---------------------+---------------------+--------------------
1 | 2023-08-01 10:00:00 | 2023-08-01 12:00:00 | 2.00
2 | 2023-08-02 09:15:00 | 2023-08-02 10:45:00 | 1.50
(2 rows)
Time: 9.567 ms
Subtraindo entre linhas
Em alguns casos, você pode querer subtrair valores de linhas diferentes. Isso costuma ser feito com window functions.
Vamos usar uma tabela monthly_sales para calcular a diferença nas vendas de um mês para o outro:
CREATE TABLE monthly_sales (
month DATE PRIMARY KEY,
total_sales DECIMAL(10, 2)
);
INSERT INTO monthly_sales (month, total_sales)
VALUES
('2023-01-01', 2000.00),
('2023-02-01', 2200.00),
('2023-03-01', 2100.00);
Para calcular a diferença mensal nas vendas, você pode usar a função LAG:
SELECT
month,
total_sales,
total_sales - LAG(total_sales) OVER (ORDER BY month) AS sales_difference
FROM
monthly_sales;
Saída esperada:
month | total_sales | sales_difference
------------+-------------+------------------
2023-01-01 | 2000.00 | [NULL]
2023-02-01 | 2200.00 | 200.00
2023-03-01 | 2100.00 | -100.00
(3 rows)
Time: 5.648 ms
Conclusão
A subtração em SQL é uma operação versátil que você pode aplicar a números, datas, timestamps e até entre linhas. Apesar das diferenças de sintaxe entre bancos SQL, a operação fundamental é a mesma. O segredo está em se familiarizar com essas nuances.
Outros artigos que você pode gostar:
Beekeeper Studio é um cliente de banco de dados gratuito e open source
A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit
O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.
O que os usuários dizem sobre o Beekeeper Studio
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com SQL. É rápido, intuitivo e torna o trabalho com bancos de dados agradável de novo."
"Já testei muitas GUIs de banco de dados, mas o Beekeeper encontra o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."