JavaRush /Курси /SQL SELF /Числові функції в SQL: округлення, залишок, ступінь і кор...

Числові функції в SQL: округлення, залишок, ступінь і корінь

SQL SELF
Рівень 8 , Лекція 3
Відкрита

SQL — це не тільки про текст і таблиці. У реальних базах даних часто доводиться мати справу з цінами, кількостями, балами, відсотками, координатами, тобто з числами. Уяви собі:

  • Ти рахуєш знижки і хочеш округлити суму до цілого.
  • Ти хочеш вивести дані по парних/непарних студентах.
  • Ти робиш аналітику по оцінках і хочеш знати квадратний корінь з дисперсії.
  • Або будуєш формули розрахунку балів з піднесенням до степеня.

SQL може впоратися з цим без допомоги зовнішніх мов програмування — все це можна робити прямо в запитах за допомогою вбудованих математичних функцій. Сьогодні розберемо шість найкорисніших:

  • ROUND() — округлення
  • CEIL() — округлення вгору
  • FLOOR() — округлення вниз
  • MOD() — залишок від ділення
  • POWER() — піднесення до степеня
  • SQRT() — квадратний корінь

* Округлення чисел: ROUND(), CEIL(), FLOOR()*

Часто при роботі з дробовими числами (наприклад, 4.67891) треба округлити результат. Наприклад, якщо ти рахуєш середню оцінку, фінальну вартість замовлення, відсоток знижки і т.д., — зайві знаки після коми не тільки "псують" вигляд, але й можуть заплутати.

ROUND() — округлення за правилами математики

ROUND(number [, digits])
  • number — саме число, яке округлюємо.
  • digits (необов'язковий) — скільки знаків залишити після коми.

Приклади:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND() працює так само, як звичне округлення в математиці: 4.5 → 5, 4.49 → 4.

Дуже корисна, якщо ти працюєш з грошима або балами, які треба показувати красиво: 4.333334.33.

CEIL() — округлення вгору до найближчого цілого

SELECT CEIL(4.1);  -- 5
  • Якщо число вже ціле, результат не змінюється.
  • Завжди повертає ціле число, не менше вихідного.

Корисно, наприклад, якщо треба визначити кількість сторінок для виводу товарів: 21 товар на 10 товарів на сторінку → треба 3 сторінки.

FLOOR() — округлення вниз

SELECT FLOOR(4.9);  -- 4
  • Повертає ціле число, не більше вихідного.

Використовується, коли треба визначити "поверх" або "сходинку", на якій знаходиться значення.

Порівняння:

Значення ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* Залишок від ділення: MOD()*

Навіщо потрібен залишок? Наприклад:

  • Перевірити, чи є число парним.
  • Розділити рядки на групи по шаблону (наприклад, розподіл на 3 команди).
  • Реалізувати повторюваний цикл (наприклад, "кожен п'ятий запис").

Синтаксис:

MOD(dividend, divisor)

Приклади:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

Зверни увагу: знак залишку залежить від знаку першого аргументу (dividend).

Застосування:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN 'Парний' ELSE 'Непарний' END AS parity
FROM students;

* Піднесення до степеня: POWER()*

Іноді треба не просто множити, а юзати математичні формули:

  • Розрахунок відсотків: base * POWER(1 + rate, years)
  • Площа круга: π * r^2
  • Вага формул у машинному навчанні

Синтаксис:

POWER(base, exponent)

Приклади:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (квадратний корінь)

Функція приймає будь-які числа: цілі, дробові, від'ємні.

Квадратний корінь: SQRT()

Якщо треба порахувати корінь, особливо в статистиці (наприклад, стандартне відхилення), SQRT() стане в пригоді.

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

Якщо передати від'ємне число — буде помилка. Якщо це можливо у твоїх даних, юзай ABS():

SELECT SQRT(ABS(-25));  -- 5

Практичні сценарії

Сценарій 1: округлення фінальної суми замовлення

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

Сценарій 2: розрахунок сторінки для виводу

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

Сценарій 3: розподіл студентів по 3 групах

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

Сценарій 4: корінь із середнього квадрата

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

Типові помилки і поради

ROUND() може приймати другий аргумент — не забувай про нього, якщо треба округлення до сотих.

MOD() з від'ємними числами може повертати неочікувані результати.

POWER() і SQRT() працюють з дробовими аргументами — юзай CAST() при потребі.

Переконайся, що в SQRT() не потрапить від'ємне число, інакше буде помилка виконання.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ