select if(mod(sum(sgn),2)=1,-1,1)*round(exp(sum(ln(qty)))) as product
from (
select if(-5<0,1,0) as sgn, abs(-5) as qty
union
select if(4<0,1,0) as sgn,abs(4) as qty
union
select if(3<0,1,0) as sgn,abs(3) as qty
) as x
количество не бывает нулевым или отрицательным, формула действительно имеет смысл при положительных результатах, но за 20 лет мне не понадобилась, до задачки: "на палете 30 ящиков, в ящиках по 10шт, сколько штук в 5 грузовиках" которую решил этим путем мой коллега