Функция ROUND() в SQL: округление с примерами

ROUND(число, знаки) округляет число до заданного количества знаков после запятой (по умолчанию до целого). Аналитик применяет её постоянно — округлить процент конверсии, средний чек, долю до читаемого вида. Звучит просто, но именно на ROUND ловят подвох: округлять надо ПОСЛЕ деления, и деление должно быть дробным.

Синтаксис

ROUND(число, число_знаков)

Примеры использования

Пример 1: Процент конверсии до 1 знака

SELECT
  ROUND(100.0 * converted / NULLIF(visitors, 0), 1) AS cr_pct
FROM funnel;

Результат:

cr_pct
24.6

Пример 2: Средний чек до копеек

SELECT category,
       ROUND(AVG(amount), 2) AS avg_check
FROM orders
GROUP BY category;

Результат:

category | avg_check
A        | 1250.5
B        | 890.33
Порешать SQL-задачи в тренажёре →

Типичная ошибка

Подвох №1: ROUND(converted / visitors, 2) при целых даст ROUND(0, 2) = 0, потому что деление целых округлилось ДО ROUND. Сначала сделай деление дробным (100.0 * или CAST), потом округляй. Подвох №2: правила округления .5 различаются — PostgreSQL для numeric использует банковское округление (к чётному); это иногда даёт неожиданную копейку в отчёте.

Где спрашивают на собеседовании

ROUND — в каждой задаче на проценты и деньги. Сам по себе он простой, но интервьюер смотрит, не округлил ли ты слишком рано и не потерял ли точность на целочисленном делении. Правильный порядок: деление (дробное) → умножение на 100 → ROUND.

FAQ: частые вопросы про ROUND

Почему ROUND возвращает 0 при делении?

Если оба операнда целые, деление округляется до целого ещё ДО ROUND (3/4 = 0), и ROUND(0, 2) = 0. Сделай числитель дробным: ROUND(100.0 * a / b, 1).

Как округлить до 2 знаков?

ROUND(значение, 2). Второй аргумент — число знаков после запятой; ROUND(x) без него округляет до целого.

Почему ROUND по-разному округляет .5?

Зависит от типа и СУБД: PostgreSQL для numeric применяет банковское округление (половина к ближайшему чётному), для double — арифметическое. Для стабильных денежных расчётов работай с типом numeric.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Агрегации · Условная логика

Другие функции SQL

COALESCE · NULLIF · CASE WHEN · STRING_AGG · COUNT · SUM OVER

Открыть SQL-тренажёр (565 задач) →