SQL não é só sobre texto e tabelas. No mundo real dos bancos de dados, a gente lida muito com preços, quantidades, pontos, porcentagens, coordenadas, ou seja, com números. Imagina só:
- Você calcula descontos e quer arredondar o valor pra inteiro.
- Você quer mostrar dados de alunos pares/ímpares.
- Você faz análise de notas e quer saber a raiz quadrada da variância.
- Ou monta fórmulas de cálculo de pontos usando potência.
SQL dá conta disso sem precisar de linguagens externas — dá pra fazer tudo direto nas queries usando as funções matemáticas embutidas. Hoje vamos ver seis das mais úteis:
ROUND()— arredondamentoCEIL()— arredondar pra cimaFLOOR()— arredondar pra baixoMOD()— resto da divisãoPOWER()— potênciaSQRT()— raiz quadrada
* Arredondando números: ROUND(), CEIL(), FLOOR()*
Muitas vezes, quando trabalhamos com números decimais (tipo 4.67891), a gente precisa arredondar o resultado. Por exemplo, se você calcula a média das notas, o valor final do pedido, a porcentagem de desconto etc., — casas decimais demais não só "estragam" o visual, mas também podem confundir.
ROUND() — arredondamento padrão da matemática
ROUND(número [, casas])
número— o número que você quer arredondar.casas(opcional) — quantas casas decimais deixar.
Exemplos:
SELECT ROUND(4.67); -- 5
SELECT ROUND(4.6789, 2); -- 4.68
ROUND() funciona igual ao arredondamento que você já conhece: 4.5 → 5, 4.49 → 4.
É super útil quando você trabalha com dinheiro ou pontos que precisam aparecer bonitinhos: 4.33333 → 4.33.
CEIL() — arredondar pra cima até o inteiro mais próximo
SELECT CEIL(4.1); -- 5
- Se o número já é inteiro, o resultado não muda.
- Sempre retorna um número inteiro, não menor que o original.
É útil, por exemplo, pra calcular quantas páginas você precisa pra mostrar produtos: 21 produtos, 10 por página → precisa de 3 páginas.
FLOOR() — arredondar pra baixo
SELECT FLOOR(4.9); -- 4
- Retorna o inteiro não maior que o original.
Usado quando você quer saber em qual "andar" ou "degrau" o valor tá.
Comparação:
| Valor | ROUND() | CEIL() | FLOOR() |
|---|---|---|---|
| 4.4 | 4 | 5 | 4 |
| 4.6 | 5 | 5 | 4 |
| -4.6 | -5 | -4 | -5 |
* Resto da divisão: MOD()*
Pra que serve o resto? Por exemplo:
- Verificar se um número é par.
- Dividir linhas em grupos por padrão (tipo dividir em 3 times).
- Fazer um ciclo repetitivo (tipo "cada quinta linha").
Sintaxe:
MOD(dividendo, divisor)
Exemplos:
SELECT MOD(17, 5); -- 2 (3*5 +2)
SELECT MOD(10, 3); -- 1 (3*3 +1)
Repara: o sinal do resto depende do sinal do primeiro argumento (dividendo).
Exemplo de uso:
SELECT student_id,
CASE WHEN MOD(student_id, 2) = 0 THEN 'Par' ELSE 'Ímpar' END AS paridade
FROM students;
* Potência: POWER()*
Às vezes não basta multiplicar, tem que usar fórmulas matemáticas:
- Cálculo de juros:
base * POWER(1 + taxa, anos) - Área do círculo:
π * r^2 - Peso das fórmulas em machine learning
Sintaxe:
POWER(base, expoente)
Exemplos:
SELECT POWER(2, 3); -- 8
SELECT POWER(5, 2); -- 25
SELECT POWER(9, 0.5); -- 3 (raiz quadrada)
A função aceita qualquer número: inteiro, decimal, negativo.
Raiz quadrada: SQRT()
Se você precisa calcular raiz, principalmente em estatística (tipo desvio padrão), SQRT() vai te ajudar.
SELECT SQRT(25); -- 5
SELECT SQRT(2); -- ~1.4142
Se passar número negativo — vai dar erro. Se isso pode acontecer nos seus dados, usa ABS():
SELECT SQRT(ABS(-25)); -- 5
Cenários práticos
Cenário 1: arredondar o valor final do pedido
SELECT order_id, ROUND(total_price, 0) AS total_arredondado
FROM orders;
Cenário 2: calcular páginas pra exibir
SELECT CEIL(COUNT(*) / 10.0) AS paginas_necessarias
FROM products;
Cenário 3: dividir alunos em 3 grupos
SELECT student_id,
MOD(student_id, 3) AS numero_grupo
FROM students;
Cenário 4: raiz do quadrado médio
SELECT SQRT(AVG(POWER(score, 2))) AS raiz_media_quadrada
FROM grades;
Erros comuns e dicas
ROUND() pode receber um segundo argumento — não esquece dele se precisar arredondar até as centésimas.
MOD() com números negativos pode dar resultados inesperados.
POWER() e SQRT() funcionam com argumentos decimais — usa CAST() se precisar.
Confere se não vai passar número negativo pro SQRT(), senão vai dar erro de execução.
GO TO FULL VERSION