POWER, SQRT и EXP в SQL: возведение в степень, корень и экспонента

POWER(x, y) возводит x в степень y, SQRT(x) извлекает квадратный корень, EXP(x) вычисляет e в степени x. Аналитику эта тройка нужна для CAGR (среднегодового темпа роста), среднего геометрического через EXP(AVG(LN(...))), стандартного отклонения и RMSE, а также евклидовых расстояний. В PostgreSQL и MySQL функции есть всегда (в PostgreSQL ещё и операторы ^ для степени и |/ для корня); в SQLite это математическое расширение (3.35+), включённое в официальных сборках.

Синтаксис

POWER(base, exponent) -- в MySQL/PostgreSQL есть синоним POW() SQRT(numeric_expression) EXP(numeric_expression) -- e в степени x

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

Пример 1: Базовые значения степени, корня и экспоненты

SELECT SQRT(9)          AS sqrt_9,
       POWER(2, 10)     AS pow_2_10,
       ROUND(EXP(1), 4) AS e;

Результат:

sqrt_9 | pow_2_10 |      e
     3 |     1024 | 2.7183

Пример 2: Среднее геометрическое роста через EXP(AVG(LN))

SELECT ROUND(EXP(AVG(LN(growth))) - 1, 4) AS geo_mean_growth
FROM (
  SELECT 1.10 AS growth UNION ALL
  SELECT 1.25 UNION ALL
  SELECT 0.95
) g;

Результат:

geo_mean_growth
         0.0938

Пример 3: RMSE прогноза заказов

SELECT ROUND(
         SQRT(AVG(POWER(actual_total - expected_total, 2))),
       2) AS rmse
FROM orders;

Результат:

rmse
78.44
Порешать SQL-задачи в тренажёре →

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

SQRT от отрицательного числа в PostgreSQL — это ошибка «cannot take square root of a negative number», а в MySQL и SQLite вернётся NULL. POWER всегда возвращает double precision (float), поэтому не полагайтесь на точное сравнение результата — оборачивайте в ROUND. LN(0) и LN отрицательного тоже ошибка, а EXP при больших аргументах переполняется. В SQLite вся тройка — математическое расширение (3.35+), в PostgreSQL есть альтернативные операторы ^ и |/.

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

Всплывает в задачах на CAGR, среднее геометрическое, стандартное отклонение и RMSE — там, где нужны степени и корни. POWER часто идёт в паре с SQRT (сумма квадратов → корень) и с LN/EXP (логарифмические преобразования выручки).

FAQ: частые вопросы про POWER / SQRT / EXP

Чем POWER отличается от оператора ^?

Это одно и то же возведение в степень, но оператор ^ есть только в PostgreSQL: 2 ^ 10. В MySQL и SQLite оператора ^ для степени нет (в некоторых диалектах ^ вообще означает побитовый XOR), поэтому переносимый вариант — функция POWER() или её синоним POW(). Для кроссдиалектного кода всегда пишите POWER.

Что вернёт SQRT от отрицательного числа?

В PostgreSQL это ошибка выполнения, и запрос упадёт. В MySQL и SQLite SQRT отрицательного вернёт NULL, не прерывая запрос. Чтобы не ловить ошибку в PostgreSQL, отфильтруйте отрицательные заранее через WHERE или CASE, либо работайте с ABS.

Работают ли POWER, SQRT и EXP в SQLite?

Да, но это функции математического расширения, появившегося в SQLite 3.35 (2021) и включаемого флагом сборки SQLITE_ENABLE_MATH_FUNCTIONS. В официальных предсобранных бинарниках оно активно, так что pow()/power(), sqrt(), exp() и ln() доступны. В кастомной сборке без математики этих функций может не быть — в отличие от ядерных ABS и ROUND.

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

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

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

Агрегации

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

STRING_AGG · COUNT · SUM OVER · ROUND · UPPER / LOWER · LENGTH

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