Есть ли в SQL Oracle функция, позволяющая производить совокупное умножение по разделу столбца? - PullRequest
0 голосов
/ 24 июня 2019

Я хотел бы получить агрегированное умножение числа значений для определенных значений определенного столбца. Проще говоря, я хотел бы, чтобы набор значений «X» соответствовал идентичным значениям столбца «Y»

Может кто-нибудь помочь объяснить ситуацию или предложить предложение?

Я попытался решить оба по отдельности, что было хорошо, но комбинированный подход, который я выбрал, не сработал, что привело к ошибке: «00909. 00000 -« Недопустимое количество аргументов »Ошибка.

Если проблема была разделена на две части, первая, насколько мне известно, решается с помощью exp(sum(ln(X)))

пока второе делается function(X) over (partition by Y)

где мой комбинированный подход был просто:

(EXP (SUM( LOG(tbl.X) ) over (partition by tbl.Y)) )

так для таблицы


Y   X
______
a   2
a   2
b   3

желаемый вывод для новой таблицы, где искомое значение равно Z, должен быть:

Y   X   Z
__________
a   2   4
a   2   4
b   3   3

1 Ответ

3 голосов
/ 24 июня 2019

Требуется функция LN( value ), а не функция LOG( base, value ):

Запрос Oracle :

SELECT t.*,
       ROUND( EXP( SUM( LN( x ) ) OVER ( PARTITION BY y ) ) ) AS z
FROM   table_name t

Вывод :

Y  |  X |  Z
:- | -: | -:
a  |  2 |  4
a  |  2 |  4
b  |  3 |  3

дБ <> скрипка здесь

Хотя вы также можете использовать LOG, указав основание:

EXP( SUM( LOG( EXP(1), x ) ) OVER ( PARTITION BY y ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...