CodeGym /Cursos /SQL SELF /Funções numéricas no SQL: arredondamento, resto, potência...

Funções numéricas no SQL: arredondamento, resto, potência e raiz

SQL SELF
Nível 8 , Lição 3
Disponível

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() — arredondamento
  • CEIL() — arredondar pra cima
  • FLOOR() — arredondar pra baixo
  • MOD() — resto da divisão
  • POWER() — potência
  • SQRT() — 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.333334.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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION