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. Для соседних задач пригодятся эти разборы:
- ALTER TABLE в SQL: как добавить, изменить и удалить столбец
- BETWEEN SQL: как выбрать значения в диапазоне
- CREATE TABLE SQL: как создать таблицу запросом
- CSV в SQL: как загрузить файл в базу данных