Вот еще один способ сделать это. Это определенно более длинный способ сделать это, но это было частью веселого проекта.
Тебе нужно вернуться в школу, лол. Здесь нужно помнить, что LOG - это обратное экспоненту.
LOG10 (X * Y) = LOG10 (X) + LOG10 (Y)
или
ln (X * Y) = ln (X) + ln (Y) (ln = натуральный логарифм или просто логарифм базы 10)
Пример
Если Х = 5 и Y = 6
X * Y = 30
ln (5) + ln (6) = 3,4
ln (30) = 3,4
е ^ 3,4 = 30, так же как и 5 х 6
EXP (3.4) = 30
Итак, выше, если каждый из 5 и 6 занимал строку в таблице, мы берем натуральный логарифм каждого значения, суммируем строки, а затем берем показатель степени, чтобы получить 30.
Ниже приведен код в инструкции SQL для SQL Server. Вероятно, потребуется некоторое редактирование, чтобы запустить его на Oracle. Надеюсь, это не большая разница, но я подозреваю, что, по крайней мере, утверждение CASE не одинаково для Oracle. Вы заметите некоторые дополнительные вещи, чтобы проверить, является ли знак строки отрицательным.
CREATE TABLE DUAL (VAL INT NOT NULL)
INSERT DUAL VALUES (3)
INSERT DUAL VALUES (5)
INSERT DUAL VALUES (2)
SELECT
CASE SUM(CASE WHEN SIGN(VAL) = -1 THEN 1 ELSE 0 END) % 2
WHEN 1 THEN -1
ELSE 1
END
* CASE
WHEN SUM(VAL) = 0 THEN 0
WHEN SUM(VAL) IS NOT NULL THEN EXP(SUM(LOG(ABS(CASE WHEN SIGN(VAL) <> 0 THEN VAL END))))
ELSE NULL
END
* CASE MIN(ABS(VAL)) WHEN 0 THEN 0 ELSE 1 END
AS PRODUCT
FROM DUAL