SQL

ROUND SQL: как округлять числа в запросах

ROUND в SQL используют, чтобы округлить число до нужного количества знаков. Команда особенно часто встречается в отчетах: цены, средний чек, проценты, коэффициенты, доли и любые расчеты, где длинная дробь мешает читать результат

Базовый пример:

SELECT ROUND(123.4567, 2) AS rounded_value;

Результат будет 123.46, потому что число округляется до двух знаков после запятой

Как работает ROUND

Первый аргумент — число или выражение, которое нужно округлить. Второй аргумент — количество знаков после запятой

SELECT
    price,
    ROUND(price, 0) AS price_rounded
FROM products;

Если указать 0, число округляется до целого. Если указать 2, остается два знака после запятой

SELECT
    amount,
    ROUND(amount, 2) AS amount_rounded
FROM payments;

В отчетах ROUND часто применяют не к готовому столбцу, а к расчету

SELECT
    category,
    ROUND(AVG(price), 2) AS avg_price
FROM products
GROUP BY category;

Так запрос считает среднюю цену по категориям и сразу делает результат читаемым

Округление до десятков и сотен

В некоторых базах можно использовать отрицательную точность, чтобы округлять не дробную часть, а целые разряды

SELECT ROUND(1234, -2) AS rounded_value;

В SQL Server такой запрос вернет округление до сотен. Но поведение и поддержка отрицательной точности зависят от СУБД, поэтому для учебного материала лучше проверять на своей базе

ROUND и форматирование — не одно и то же

ROUND меняет числовое значение в результате запроса. Форматирование меняет только то, как число выглядит. Например, можно округлить число до двух знаков, но интерфейс все равно покажет его с другим количеством нулей, если так настроен вывод

Если вам нужен именно красивый текст для отчета, может понадобиться функция форматирования. Если нужен расчет, используйте ROUND

Мини-практика

Создайте учебную таблицу с ценами и посчитайте среднюю цену по категории

CREATE TABLE products (
    id INTEGER,
    category TEXT,
    price DECIMAL(10, 4)
);

INSERT INTO products (id, category, price) VALUES
(1, 'Техника', 1099.9900),
(2, 'Техника', 2499.4990),
(3, 'Книги', 599.9900),
(4, 'Книги', 799.4900);

SELECT
    category,
    ROUND(AVG(price), 2) AS avg_price
FROM products
GROUP BY category;

Проверьте, что среднее значение стало короче и удобнее для чтения. Затем поменяйте 2 на 0 и сравните результат

Частые ошибки

Первая ошибка — использовать ROUND для текстовых значений. Если столбец хранит число как текст, база может отказать или попытаться преобразовать значение не так, как вы ожидаете

Вторая ошибка — думать, что ROUND всегда сохраняет результат в таблицу. В обычном SELECT округление показывается только в результате запроса. Чтобы сохранить значение, нужен UPDATE, но это уже изменение данных

Третья ошибка — забывать про разные правила типов. В некоторых базах целочисленное деление может дать целое число еще до округления. Если результат странный, проверьте типы данных и преобразование

Что почитать дальше по SQL

Если нужен общий маршрут по теме, откройте рубрику SQL. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x