Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 агрегат - произведение вместо суммы  [new]
вопросящий
Guest
Есть задача агрегирования значений, но с перемножением вместо суммы. Никак не найду решения для любого количества элементов. Вот пример.
with t as (
	select 'a' a, 10 b from dual union all
	select 'b' a, 2  b from dual union all
	select 'b' a, 10 b from dual union all
	select 'c' a, 2  b from dual union all
	select 'c' a, 3  b from dual union all
	select 'c' a, 10 b from dual
)

Результат должен быть вида
a	10
b	20
c	60

То есть для каждого значения a надо перемножить все значения b. Значения b для одного a уникальные.
Пока смог только с использованием поиска предыдущих значений. Но здесь надо знать сколько разных значений максимально может быть. Та и тупо как-то. Может кто знает стандартное решение для такого случая (для N значений)? Или предложит более умный вариант?
Вот мой вариант.
with t as (
	select 'a' a, 10 b from dual union all
	select 'b' a, 2  b from dual union all
	select 'b' a, 10 b from dual union all
	select 'c' a, 2  b from dual union all
	select 'c' a, 3  b from dual union all
	select 'c' a, 10 b from dual
), t1 as (
	select 
		a,
		b b0,
		nvl(lag(b) over (partition by a order by b),1) b1,
		nvl(lag(b,2) over (partition by a order by b),1) b2,
		nvl(lag(b,3) over (partition by a order by b),1) b3,
		nvl(lag(b,4) over (partition by a order by b),1) b4,
		nvl(lag(b,5) over (partition by a order by b),1) b5,
		nvl(lag(b,6) over (partition by a order by b),1) b6
	from t
)
select
	a, max(b0*b1*b2*b3*b4*b5*b6) b
from t1
group by a

Спасибо заранее.
16 фев 17, 19:13    [20219125]     Ответить | Цитировать Сообщить модератору
 Re: агрегат - произведение вместо суммы  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27290
вопросящий
агрегирования значений, но с перемножением вместо суммы
Самодельная агрегатная функция или известный математический трюк
16 фев 17, 19:32    [20219167]     Ответить | Цитировать Сообщить модератору
 Re: агрегат - произведение вместо суммы  [new]
вопросящий
Guest
Elic
вопросящий
агрегирования значений, но с перемножением вместо суммы
Самодельная агрегатная функция или известный математический трюк

Век живи, век учись. Про "известный математический трюк" не знал. Подходит. Спасибо.
16 фев 17, 19:48    [20219202]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить