Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / агрегат - произведение вместо суммы / 3 сообщений из 3, страница 1 из 1
16.02.2017, 19:13
    #39406099
агрегат - произведение вместо суммы
Есть задача агрегирования значений, но с перемножением вместо суммы. Никак не найду решения для любого количества элементов. Вот пример.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
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
)


Результат должен быть вида
Код: plsql
1.
2.
3.
a	10
b	20
c	60


То есть для каждого значения a надо перемножить все значения b. Значения b для одного a уникальные.
Пока смог только с использованием поиска предыдущих значений. Но здесь надо знать сколько разных значений максимально может быть. Та и тупо как-то. Может кто знает стандартное решение для такого случая (для N значений)? Или предложит более умный вариант?
Вот мой вариант.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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


Спасибо заранее.
...
Рейтинг: 0 / 0
16.02.2017, 19:32
    #39406111
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
агрегат - произведение вместо суммы
вопросящийагрегирования значений, но с перемножением вместо суммыСамодельная агрегатная функция или известный математический трюк
...
Рейтинг: 0 / 0
16.02.2017, 19:48
    #39406121
агрегат - произведение вместо суммы
Elicвопросящийагрегирования значений, но с перемножением вместо суммыСамодельная агрегатная функция или известный математический трюк
Век живи, век учись. Про "известный математический трюк" не знал. Подходит. Спасибо.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / агрегат - произведение вместо суммы / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]