Произведение всех чисел в столбце таблицы одним SQL запросом

Вернуться назад

03.01.2018

Я думаю, каждый знает такую функцию SQL, как SUM(). Она позволяет посчитать сумму всех значений по определённому столбцу. Но что, если нам вдруг понадобится посчитать не сумму, а произведение всех значений?

Как ни странно, функция SUM() нам тоже пригодится. Как нам от произведения перейти к сумме? Вспомним начала матанализа: логарифм произведения равен сумме логарифмов. Будем использовать натуральный логарифм LN() в паре с функцией возведения экспоненты в степень EXP()

Привожу пример для postgresql, но должно работать и в других СУБД:

select exp(sum(ln(field))) from tab

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

Вот так мы от суммы переходим к произведению при помощи одного простого SQL запроса. Не знаю, имеет ли это практический смысл, но может кому-то и пригодится)

Тэги: sql, PostgreSQL, головоломки.