SQL | Произведение значений столбца



К сожалению, эту задачу нельзя решить стандартныйми функциями SQL практически ни в одной СУБД. Но можно пойти через свойства логарифмов: логарифм произведения равен сумме логаримов. Следовательно, если мы применим exp к сумме логарифмов значений, мы получим нужный результат:

SELECT exp(SUM(log(value))) product FROM (

VALUES (2),(3),(4),(5)

) X(value);


Однако данное решение не будет работать с числами, которые меньше либо равны нулю, так как для них логарифм не определён.

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

- Если среди значений есть нули, то результатом будет 0.

- Если число отрицательных значений нечетное, то домножаем произведение абсолютных значений столбца на -1.

- Если число отрицательных значений четное, то результатом будет произведение абсолютных значений столбца.

В результате получаем возможность считать произведение значений столбца.