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() не попадёт отрицательное число, иначе будет ошибка выполнения.

2
Задача
SQL SELF, 8 уровень, 3 лекция
Недоступна
Округление чисел до целого
Округление чисел до целого
2
Задача
SQL SELF, 8 уровень, 3 лекция
Недоступна
Расчёт площадей круга
Расчёт площадей круга
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Сергей Уровень 12
8 ноября 2025
MOD(dividend, divisor) dividend: Число, которое делится divisor: Число, на которое делится
Slevin Уровень 11
2 сентября 2025
ROUND(number [, digits]) Это что за квадратные скобки, которых нет ни в одном вашем примере?
апецт Уровень 14
21 января 2026
необязательные аргументы. если в ROUND не писать второй аргумент (digits) он округляет до целого, если напистаь - до указанного количества цифр послое запятой
Slevin Уровень 11
22 января 2026
А, то есть они такими скобками выделили то, что можно опустить... Просто для меня это выглядел как образец формата записи. Спасибо за разъяснение.
Anemon Уровень 13 Expert
18 августа 2025
🤓