loading..
Русский    English
22:29
листать

Функции LOG и EXP

Функция LOG(x) возвращает натуральный логарифм выражения x. Результат имеет тип   Тип данных с плавающей точкой. float.

Начиная с версии  Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2012, эта функция приобрела необязательный аргумент, который задает основание логарифма.

Консоль
Выполнить
  1. SELECT LOG(2) ln, LOG(2, 10) log10;

logn    log10
0.693147180559945    0.301029995663981

Этот запрос возвращает натуральный и десятичный логарифмы числа 2.

Имеется также унаследованная функция LOG10(x), возвращающая десятичный логарифм выражения x. Она изначально являлась избыточной, ввиду известной формулы преобразования логарифмов:

LOGba = LOGca/LOGcb

Соответственно три следующих выражения дадут один и тот же результат (0.301029995663981):

Консоль
Выполнить
  1. SELECT LOG(2,10) log_1, LOG10(2) log_2, LOG(2)/LOG(10) log_3;

Функция EXP(x) - экспонента - возвращает число e в степени x. Тип возвращаемого значения FLOAT.

Эта функция является обратной к функции LOG:

Консоль
Выполнить
  1. SELECT EXP(LOG(2)) a, LOG(EXP(2)) b;

a    b
2    2

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

  1. log(a*b*c) = log(a) + log(b) + log(c).

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

Консоль
Выполнить
  1. SELECT LOG(2*5*7) log_prod,  LOG(2) + LOG(5) + LOG(7) sum_log;

log_prod    sum_log
4,24849524204936    4,24849524204936

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

  1. a*b*c = exp(log(a*b*c)) = exp(log(a) + log(b) + log(c)).

Вычислить факториал числа, равного количеству строк в таблице Laptop.

Решение

Консоль
Выполнить
  1. SELECT EXP(SUM(LOG(rn))) FROM(
  2. SELECT ROW_NUMBER() OVER(ORDER BY code) rn FROM laptop
  3. ) X;

720
Здесь во внутреннем запросе мы пронумеровали записи таблицы Laptop с помощью ранжирующей функции ROW_NUMBER. (Заметим, что порядок, в котором нумеруются строки, в данном случае значения не имеет). Затем просто перемножили эти номера.

Рекомендуемые упражнения: 106

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
сегодня
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100