Как округлить число в sql
Перейти к содержимому

Как округлить число в sql

  • автор:

Как округлить число в sql

Для округления используется функция ROUND() . Вызванная с одним аргументом она округляет число до ближайшего целого, например:

SELECT ROUND( 10.4 ); 

Значение 10.4 будет округлено до 10.

Второй аргумент показывает до скольки знаков после запятой нужно округлять:

SELECT ROUND( 10.812, 2 ); 

В результате мы получим 10.81.

Функции ROUND, CEILING, FLOOR в SQL: округление и другие действия с числами

Функция SQL ROUND(результат_вычислений, n) округляет результат вычислений до n-го знака после запятой. Округление производится по правилам арифметики.

Если n — отрицательное число (−n), то округление происходит до n-го знака перед запятой. Таким образом, с помощью функции ROUND можно получить и целое число как результат округления.

Пример 1. В базе данных фирмы есть таблица Staff, содержащая данные о сотрудниках фирмы. Выведем индивидуальные размеры заработной платы сотрудников:

SELECT Name, Salary FROM STAFF

Результатом выполнения запроса будет следующая таблица:

Name Salary
Sanders 18357.5
Pernal 15430.0
Marenghi 17506.8
Doctor 12322.8
Factor 16228.7
Junkers 16232.8
Moonlight 21500.6
Aisen 19540.7
MacGregor 15790.8

Для вычисления среднего размера заработной платы пишем запрос:

SELECT AVG (Salary) FROM STAFF

Получим следующий результат:

AVG(Salary)
16990.06662326389

Для отчётов результат с таким числом знаков после запятой не годится. Округлим результат до второго знака после запятой с помощью функции ROUND:

SELECT ROUND ( AVG (Salary),2) AS Avg_Salary FROM STAFF

Результат будет следующим:

Avg_Salary
16990.07

Пример 2. Теперь округлим результат до первого знака до запятой, применяя в функции ROUND параметр минус единица:

SELECT ROUND ( AVG (Salary),−1) AS Avg_Salary FROM STAFF

Результат будет следующим:

Avg_Salary
16990

Сместим округление ещё на один знак влево и применим в функции ROUND параметр минус 2:

SELECT ROUND ( AVG (Salary),−2) AS Avg_Salary FROM STAFF

Результат будет следующим:

Avg_Salary
17000

Функция SQL ROUND может применяться ещё и с третьим необязательными параметром (кроме MySQL). Если этим параметром будет 1, то округление производиться не будет, просто в результате будет оставлено столько знаков после запятой, сколько указано во втором параметре.

Пример 3. Оставить в результате вычислений средней заработной платы два знака после запятой, не производя округления. Применяем функцию ROUND с тремя параметрами:

SELECT ROUND ( AVG (Salary),2,1) AS Avg_Salary FROM STAFF

Результат будет следующим:

Avg_Salary
16990.06

Функция MySQL TRUNCATE

В MySQL аналогом разновидности функции ROUND без округления результата является функция TRUNCATE. Она, как и ROUND в общем случае имеет два параметра: результат вычислений и число знаков после запятой.

Пример 4. Условие то же, что в примере 3, но в MySQL. Применяем функцию TRUNCATE:

SELECT TRUNCATE ( AVG (Salary),2) AS Avg_Salary FROM STAFF

Получим результат без округления, как в предыдущем примере:

Avg_Salary
16990.06

Функция SQL CEILING

Функция SQL CEILING не производит округления. Она просто принимает дробное число и возвращает максимальное целое число, не меньшее принятого. Приведём примеры действия функции с различными принятыми дробными числами.

Функция с аргументом Возвращаемое значение
CEILING(0.38) 1
CEILING(1.63) 2
CEILING(−0.38) 0
CEILING(−1.63) −1

В случае функции CEILING некорректно говорить об округлении, поскольку она преобразует числа без учёта правил арифметики.

Функция SQL FLOOR

Функция FLOOR также не производит округления. Её действие противоположно действию функции CEILING. Она принимает дробное число и возвращает максимальное целое число, не большее принятого. Приведём примеры действия функции с различными принятыми дробными числами.

Функция с аргументом Возвращаемое значение
FLOOR(0.38) 0
FLOOR(1.63) 1
FLOOR(−0.38) −1
FLOOR(−1.63) −2

Функция FLOOR, как и функция CEILING, преобразует числа без учёта правил арифметики.

Функция ROUND

Посчитать средний размер жесткого диска ПК. Результат представить с двумя знаками после десятичной точки.

Консоль

Выполнить

мы получим такой результат:

Чтобы выполнить требуемое округление можно воспользоваться функцией ROUND :

Консоль

Выполнить

Второй аргумент этой функции как раз указывает число десятичных знаков результата.

Как видно, результат был округлен по арифметическим правилам. Однако у функции ROUND есть третий необязательный аргумент, который говорит о том, округлять ли результат (значение 0 — принимается по умолчанию) или отбрасывать цифры сверх удерживаемых (ненулевое значение).

Т.е. если мы перепишем наш запрос так:

Консоль

Выполнить

то получим другой результат:

Кстати, округлять можно до любого знака, не только десятичного. Например, чтобы округлять до десятков, сотен и т.д., используются отрицательные значения второго аргумента. Следующий запрос округляет результат до десятков.

Консоль

Выполнить

Следует отметить, что функция ROUND выполняет округление, но не меняет тип результата. Т.е. если аргумент будет иметь тип dec(12,6), то и результат округления будет того же типа, а именно,

В этом легко убедиться, выполнив запрос

Поэтому, если вы хотите избавиться от хвостовых нулей, используйте преобразование к нужному вам типу, например, dec(12,2). Тогда нам и функция ROUND не потребуется. 🙂

Консоль

Выполнить

Артём Санников

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Базы данных › MySQL › Математические функции › Округление чисел в SQL, математическая функция ROUND()

Округление чисел в SQL, математическая функция ROUND()

Функция ROUND() в SQL отвечает за округление до ближайшего целого числа.

Синтаксис ROUND()

SELECT ROUND(поле1) FROM имя_таблицы WHERE условие_для_выборки;

Примеры запросов

Математическая функция ROUND() для округления числа в SQL

1. Выполните округление числа 13,7

SELECT ROUND(13.7);

2. Выполните округление заработной платы сотрудника с идентификатором 2, до двух знаков после точки

SELECT ROUND(salary, 2) FROM workers WHERE >3. Округлите заработную плату Василия Петрова до целого числа
SELECT ROUND(salary, 0) FROM workers WHERE first_name = 'Василий' AND last_name = 'Петров';

Записи по теме

  • Логарифм в SQL, математическая функция LOG()
  • Экспонента в SQL, математическая функция EXP()
  • Логарифм по основанию 10, математическая функция LOG10() в SQL
  • Возведение числа в степень, математическая функция POWER() в SQL
  • Модуль числа в SQL, математическая функция ABS()
  • Деление по модулю в SQL, математическая функция MOD()
  • Квадратный корень числа в SQL, математическая функция SQRT()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *