Числовые функции
abs()add()ceil()cos()divide()even()exp()floor()fmod()gcd()greatest()isfinite()isinf()isnan()lcm()least()lgamma()ln()log()log2()multiply()nextafter()pi()pow()radians()random()round_even()round()setseed()sign()signbit()sin()sqrt()subtract()trunc()- Оператор
+ - Оператор
- - Оператор
* - Оператор
/ - Оператор
% - Оператор
^
Числовые функции — это функции для работы с данными числовых типов: BIGINT, NUMERIC и DOUBLE.
abs()
| Описание |
Вычисляет модуль числа. |
| Использование |
|
Посмотреть примеры
SELECT
abs(-1) AS result_1,
abs(0) AS result_2,
abs(1.1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 0 | 1.1 |
+----------+----------+----------+
add()
| Описание |
Складывает числа. |
| Использование |
|
См. также Оператор +.
Посмотреть примеры
SELECT
add(1, 1) AS result_1,
add(-1.1, 2.1) AS result_2,
add(1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 2 | 1.0 | 1 |
+----------+----------+----------+
ceil()
| Описание |
Округляет число в бОльшую сторону. |
| Использование |
|
| Псевдонимы |
|
Посмотреть примеры
SELECT
ceil(0.1) AS result_1,
ceil(-0.1) AS result_2,
ceiling(1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 0 | 1 |
+----------+----------+----------+
cos()
| Описание |
Вычисляет косинус угла, заданного в радианах. |
| Использование |
|
Посмотреть примеры
SELECT
cos(0) AS result_1,
cos(pi()) AS result_2,
cos(pi()/3) AS result_3;
+----------+----------+--------------------+
| result_1 | result_2 | result_3 |
+----------+----------+--------------------+
| 1 | -1 | 0.5000000000000001 |
+----------+----------+--------------------+
divide()
| Описание |
Возвращает результат деления в виде целого числа. |
| Использование |
|
Посмотреть примеры
SELECT
divide(7, 2) AS result_1,
divide(7, -2) AS result_2,
divide(7, 0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 3 | -3 | null |
+----------+----------+----------+
even()
| Описание |
Округляет до ближайшего четного числа в сторону от нуля. |
| Использование |
|
Посмотреть примеры
SELECT
even(2.1) AS result_1,
even(-2.1) AS result_2,
even(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | -4 | 0 |
+----------+----------+----------+
exp()
| Описание |
Вычисляет экспоненту числа. |
| Использование |
|
Вычисляет экспоненциальное значение числа: .
Посмотреть примеры
SELECT
exp(0) AS result_1,
exp(1) AS result_2,
exp(-1) AS result_3;
+----------+-------------------+---------------------+
| result_1 | result_2 | result_3 |
+----------+-------------------+---------------------+
| 1 | 2.718281828459045 | 0.36787944117144233 |
+----------+-------------------+---------------------+
floor()
| Описание |
Округляет число в меньшую сторону. |
| Использование |
|
Посмотреть примеры
SELECT
floor(0.9) AS result_1,
floor(-0.9) AS result_2,
floor(1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 0 | -1 | 1 |
+----------+----------+----------+
fmod()
| Описание |
Возвращает остаток от деления первого аргумента на второй. |
| Использование |
|
Посмотреть примеры
SELECT
fmod(3, 2) AS result_1,
fmod(3.1, 2) AS result_2,
fmod(-10, 4) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 1.1 | 2 |
+----------+----------+----------+
gcd()
| Описание |
Вычисляет наибольший общий делитель двух чисел. |
| Использование |
|
| Псевдонимы |
|
Посмотреть примеры
SELECT
gcd(12, 9) AS result_1,
gcd(-12, 9) AS result_2,
gcd(12, 0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 3 | 3 | 12 |
+----------+----------+----------+
greatest()
| Описание |
Возвращает наибольшее число из указанных в аргументах. |
| Использование |
|
Посмотреть примеры
SELECT
greatest(1, 2, 3, 4, 4) AS result_1,
greatest(1, -1) AS result_2,
greatest(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | 1 | 0 |
+----------+----------+----------+
isfinite()
| Описание |
Проверяет, является ли число конечным. |
| Использование |
|
Посмотреть примеры
SELECT
isfinite(1) AS result_1,
isfinite('Infinity'::DOUBLE) AS result_2,
isfinite(NULL) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | false | null |
+----------+----------+----------+
isinf()
| Описание |
Проверяет, является ли число бесконечным. |
| Использование |
|
Посмотреть примеры
SELECT
isinf(1) AS result_1,
isinf('Infinity'::DOUBLE) AS result_2,
isinf(NULL) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| false | true | null |
+----------+----------+----------+
isnan()
| Описание |
Проверяет, имеет ли аргумент значение |
| Использование |
|
Посмотреть примеры
SELECT
isnan('NaN'::DOUBLE) AS result_1,
isnan(1.1) AS result_2,
isnan(NULL) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| true | false | null |
+----------+----------+----------+
lcm()
| Описание |
Вычисляет наименьшее общее кратное двух чисел. |
| Использование |
|
| Псевдонимы |
|
Посмотреть примеры
SELECT
lcm(3, 7) AS result_1,
lcm(333, 777) AS result_2,
lcm(37, 0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 21 | 2331 | 0 |
+----------+----------+----------+
least()
| Описание |
Возвращает наименьшее число из указанных в аргументах. |
| Использование |
|
Посмотреть примеры
SELECT
least(1, 1, 2, 3, 4) AS result_1,
least(1, -1) AS result_2,
least(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | -1 | 0 |
+----------+----------+----------+
lgamma()
| Описание |
Вычисляет логарифм гамма-функции. |
| Использование |
|
Посмотреть примеры
SELECT
lgamma(1) AS result_1,
lgamma(11) AS result_2,
lgamma(1.1) AS result_3;
+----------+--------------------+-----------------------+
| result_1 | result_2 | result_3 |
+----------+--------------------+-----------------------+
| 0 | 15.104412573075518 | -0.049872441259839764 |
+----------+--------------------+-----------------------+
ln()
| Описание |
Вычисляет натуральный логарифм числа. |
| Использование |
|
Посмотреть примеры
SELECT
ln(1) AS result_1,
ln(11) AS result_2,
ln(1.1) AS result_3;
+----------+--------------------+---------------------+
| result_1 | result_2 | result_3 |
+----------+--------------------+---------------------+
| 0 | 2.3978952727983707 | 0.09531017980432493 |
+----------+--------------------+---------------------+
log()
| Описание |
Вычисляет логарифм числа по основанию |
| Использование |
|
| Псевдонимы |
|
Посмотреть примеры
SELECT
log(1) AS result_1,
log(100) AS result_2,
log(0.01) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 0 | 2 | -2 |
+----------+----------+----------+
log2()
| Описание |
Вычисляет логарифм числа по основанию |
| Использование |
|
Посмотреть примеры
SELECT
log2(1) AS result_1,
log2(2) AS result_2,
log2(4096) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 0 | 1 | 12 |
+----------+----------+----------+
multiply()
| Описание |
Перемножает два числа. |
| Использование |
|
См. также Оператор *.
Посмотреть примеры
SELECT
multiply(2, 2) AS result_1,
multiply(0, 2) AS result_2,
multiply(0.2, -0.2) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | 0 | -0.04 |
+----------+----------+----------+
nextafter()
| Описание |
Возвращает следующее значение с переменной точностью (типа |
| Использование |
|
Посмотреть примеры
SELECT
nextafter(1::DOUBLE, 2) AS result_1,
nextafter(1::BIGINT, 2) AS result_2,
nextafter(-1::BIGINT, 0) AS result_3;
+--------------------+--------------------+---------------------+
| result_1 | result_2 | result_3 |
+--------------------+--------------------+---------------------+
| 1.0000000000000002 | 1.0000000000000002 | -0.9999999999999999 |
+--------------------+--------------------+---------------------+
pi()
| Описание |
Возвращает значение числа π. |
| Использование |
|
Посмотреть примеры
SELECT
pi() AS result_1,
pi()/2 AS result_2,
2*pi() AS result_3;
+-------------------+--------------------+-------------------+
| result_1 | result_2 | result_3 |
+-------------------+--------------------+-------------------+
| 3.141592653589793 | 1.5707963267948966 | 6.283185307179586 |
+-------------------+--------------------+-------------------+
pow()
| Описание |
Возводит первый аргумент в степень, заданную вторым аргументом. |
| Использование |
|
| Псевдонимы |
|
См. также Оператор ^.
Посмотреть примеры
SELECT
pow(2, 5) AS result_1,
pow(25, -1) AS result_2,
pow(25, 0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 32 | 0.04 | 1 |
+----------+----------+----------+
radians()
| Описание |
Переводит градусы в радианы. |
| Использование |
|
Посмотреть примеры
SELECT
radians(0) AS result_1,
radians(180) AS result_2,
radians(-180/pi()) AS result_3;
+----------+-------------------+----------+
| result_1 | result_2 | result_3 |
+----------+-------------------+----------+
| 0 | 3.141592653589793 | -1 |
+----------+-------------------+----------+
random()
| Описание |
Возвращает произвольное число (типа |
| Использование |
|
См. также setseed().
Посмотреть примеры
SELECT
random() AS result;
+--------------------+
| result |
+--------------------+
| 0.5656213557274057 |
+--------------------+
Функцию random() удобно использовать для выбора из таблицы произвольного сэмпла заданной длины.
|
Покажем на примере, как выбрать из таблицы с 1 миллионом строк случайный сэмпл размером 10:
CREATE TABLE demo.numbers (numbers BIGINT);
INSERT INTO demo.numbers (numbers)
SELECT unnest(generate_series(1,1000000));
SELECT * FROM demo.numbers
ORDER BY random()
LIMIT 10;
+---------+
| numbers |
+---------+
| 265453 |
+---------+
| 16766 |
+---------+
| 861234 |
+---------+
| 455059 |
+---------+
| 898869 |
+---------+
| 454774 |
+---------+
| 465029 |
+---------+
| 885538 |
+---------+
| 465844 |
+---------+
| 50905 |
+---------+
round_even()
| Описание |
Округляет число из первого аргумента до ближайшего четного с указанной во втором аргументе точностью. |
| Использование |
|
| Псевдонимы |
|
Второй аргумент указывает на количество десятичных знаков точности и может быть отрицательным числом.
Подробнее об округлении до ближайшего четного числа см. здесь.
Посмотреть примеры
SELECT
round_even(4.5, 0) AS result_1,
round_even(3.5, 0) AS result_2,
round_even(-4.5, 0) AS result_3,
round_even(-3.5, 0) AS result_4,
round_even(4.45, 1) AS result_5,
round_even(4.35, 1) AS result_6,
round_even(35.35, -1) AS result_7;
+----------+----------+----------+----------+----------+----------+----------+
| result_1 | result_2 | result_3 | result_4 | result_5 | result_6 | result_7 |
+----------+----------+----------+----------+----------+----------+----------+
| 4 | 4 | -4 | -4 | 4.4 | 4.4 | 40 |
+----------+----------+----------+----------+----------+----------+----------+
round()
| Описание |
Округляет число из первого аргумента с указанной во втором аргументе точностью. |
| Использование |
|
Второй аргумент указывает на количество десятичных знаков точности и может быть отрицательным числом.
Посмотреть примеры
SELECT
round(4.5, 0) AS result_1,
round(4.45, 1) AS result_2,
round(44.5, -1) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 5 | 4.5 | 40 |
+----------+----------+----------+
setseed()
| Описание |
Фиксирует начальное значение для функции |
| Использование |
|
См. также random().
Посмотреть примеры
SELECT
setseed(0.5) AS seed,
random() AS random;
+------+--------------------+
| seed | random |
+------+--------------------+
| null | 0.8511131886287325 |
+------+--------------------+
sign()
| Описание |
Возвращает |
| Использование |
|
Посмотреть примеры
SELECT
sign(10) AS result_1,
sign(-10) AS result_2,
sign(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | -1 | 0 |
+----------+----------+----------+
signbit()
| Описание |
Определяет, установлен ли бит знака у вещественного числа. |
| Использование |
|
Посмотреть примеры
SELECT
signbit(-1) AS result_1,
signbit(-'Infinity'::DOUBLE) AS result_2,
signbit(0) AS result_3,
signbit(1) AS result_4,
signbit('Infinity'::DOUBLE) AS result_5;
+----------+----------+----------+----------+----------+
| result_1 | result_2 | result_3 | result_4 | result_5 |
+----------+----------+----------+----------+----------+
| true | true | false | false | false |
+----------+----------+----------+----------+----------+
sin()
| Описание |
Вычисляет синус угла, заданного в радианах. |
| Использование |
|
Посмотреть примеры
SELECT
sin(0) AS result_1,
sin(pi()/2) AS result_2,
sin((3*pi())/2) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 0 | 1 | -1 |
+----------+----------+----------+
sqrt()
| Описание |
Вычисляет квадратный корень. |
| Использование |
|
Число num должно быть неотрицательным.
Посмотреть примеры
SELECT
sqrt(4) AS result_1,
sqrt(144) AS result_2,
sqrt(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 2 | 12 | 0 |
+----------+----------+----------+
subtract()
| Описание |
Вычитает второй аргумент из первого. |
| Использование |
|
См. также Оператор -.
Посмотреть примеры
SELECT
subtract(1, 2) AS result_1,
subtract(1.1, 2.2) AS result_2,
subtract(-1, -2) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| -1 | -1.1 | 1 |
+----------+----------+----------+
trunc()
| Описание |
Отбрасывает все знаки после десятичного разделителя. |
| Использование |
|
Не следует путать с округлением round.
Посмотреть примеры
SELECT
trunc(1.99) AS result_1,
trunc(-11.9) AS result_2,
trunc(0.119) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | -11 | 0 |
+----------+----------+----------+
Оператор +
| Описание |
Прибавляет правый аргумент к левому. |
| Использование |
|
Если используется с типами для для даты и времени, то прибавляет интервал к значению времени. Возвращает значение типа TIME.
См. также add().
Посмотреть примеры
SELECT
3 + 2 AS result_1,
3 + 2 + -1 AS result_2,
1.1 + 1.9 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 5 | 4 | 3.0 |
+----------+----------+----------+
SELECT
TIME '12:11:10' + INTERVAL 3 hours AS result_time_1,
INTERVAL '12:11:10' + TIME '1:1:1' AS result_time_2;
+---------------+---------------+
| result_time_1 | result_time_2 |
+---------------+---------------+
| 15:11:10 | 13:12:11 |
+---------------+---------------+
Оператор -
| Описание |
Вычитает правый аргумент из левого. |
| Использование |
|
Если используется с типами для для даты и времени, то вычитает интервал из значения времени. Возвращает значение типа TIME.
См. также subtract().
Посмотреть примеры
SELECT
3 - 2 AS result_1,
3 - 2 - +1 AS result_2,
1.2 - 0.2 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 0 | 1.0 |
+----------+----------+----------+
SELECT
TIME '12:11:10' - INTERVAL 3 HOUR AS result_time_1,
TIME '12:11:10' - INTERVAL 3 HOUR - INTERVAL 1 HOUR AS result_time_2;
+---------------+---------------+
| result_time_1 | result_time_2 |
+---------------+---------------+
| 09:11:10 | 08:11:10 |
+---------------+---------------+
Оператор *
| Описание |
Перемножает аргументы. |
| Использование |
|
См. также multiply().
Посмотреть примеры
SELECT
3*2 AS result_1,
3*+2*-2 AS result_2,
3*0 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 6 | -12 | 0 |
+----------+----------+----------+
Оператор /
| Описание |
Делит левый аргумент на правый. |
| Использование |
|
Возвращает результат в виде числа с переменной точностью (типа DOUBLE).
Посмотреть примеры
SELECT
3/2 AS result_1,
3/+2/-2 AS result_2,
3/1 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1.5 | -0.75 | 3 |
+----------+----------+----------+
Оператор %
| Описание |
Возвращает остаток от деления левого аргумента на правый. |
| Использование |
|
Посмотреть примеры
SELECT
3 % 2 AS result_1,
15 % 10 % 3 AS result_2,
5 % 2.4 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 2 | 0.2 |
+----------+----------+----------+
Оператор ^
| Описание |
Возводит левый аргумент в степень, заданную правым аргументом. |
| Использование |
|
См. также pow().
Посмотреть примеры
SELECT
2^3 AS result_1,
2^3^2 AS result_2,
1^0 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 8 | 64 | 1 |
+----------+----------+----------+