Подкинте идею. Разные агрегаты.

vava
Дата: 02.12.2009 15:45:03
Здравствуйте.
Подскажите, как можно выполнить агрегирование с разными функциями по разным измерениям?
Есть табличка вида
id1,id2, x
Нужно проделать следующее:
select sum(tt.x1) from
(
select t.id1,min(t.x) x1 from my_tbl t
group by t.id1
) tt

Можно ли такое проделать без подзапроса, например через аналитические функции ?
andrey_anonymous
Дата: 02.12.2009 15:47:50
select sum(min(t.x)) from my_tbl t
group by t.id1
уже пробовали?

Ну и мысли вслух: "какого полинома народ стал массово шугаться подзапросов?"
vava
Дата: 02.12.2009 16:22:33
andrey_anonymous
select sum(min(t.x)) from my_tbl t
group by t.id1
уже пробовали?

Ну и мысли вслух: "какого полинома народ стал массово шугаться подзапросов?"

Да, вы правы, для представленного мной примера такое подойдет.
Но вот если, например, измерений будет три, то как обойти?

Мне это нужно для простенького построителя отчетов. Нужно чтобы пользователь мог вычислять всяческие средние из минимумов и делить получившееся на сумму по третьему измерению.
Если это делать через подзапросы, то уж больно здоровый запрос генерируется.
andrey_anonymous
Дата: 02.12.2009 16:31:57
vava
чтобы пользователь мог вычислять всяческие средние из минимумов и делить получившееся на сумму по третьему измерению.

Похоже, Вам выпала дорога в сторону (R)OLAP
dbms_photoshop
Дата: 02.12.2009 16:53:29
vava
andrey_anonymous
select sum(min(t.x)) from my_tbl t
group by t.id1
уже пробовали?

Ну и мысли вслух: "какого полинома народ стал массово шугаться подзапросов?"

Да, вы правы, для представленного мной примера такое подойдет.
Но вот если, например, измерений будет три, то как обойти?

select sum(min(t.x)) from my_tbl t
group by t.id1, t.id2, t.id3
:)
По логике вещей - id - измерения, х - мера. Судя по твоему запросу.

Приведи лучше пример того что есть и что хочется получить и не забывый про тег SRC.
vava
Дата: 02.12.2009 16:54:44
andrey_anonymous
vava
чтобы пользователь мог вычислять всяческие средние из минимумов и делить получившееся на сумму по третьему измерению.

Похоже, Вам выпала дорога в сторону (R)OLAP


А в чем должны выражаться мои действия?
У меня есть базка 9.2 ентерпрайз. Генерация запросов и выгрузка с каким-либо "однотипным" агрегированием идет довольно лихо при помощи PL/SQL и открытия курсора на стороне базы.
Но появилась надобность в разнообразном пошаговом агрегировании и в формулах "как в екселе", вот сижу думаю...
andrey_anonymous
Дата: 02.12.2009 17:30:27
vava
А в чем должны выражаться мои действия?
... "как в екселе", вот сижу думаю...

1) updgrade на 10g, тем более что 9i уже unsupported
2) гуглим доку на предмет MODEL
dbms_photoshop
Дата: 02.12.2009 18:06:21
andrey_anonymous,
В модели здесь, насколько я понимаю (vava так и не привел пример что он хочет получить), необходимости нет. Она по большому счету нужна для "итеративных" (имеется в виду не использование iterate в модели, а построчных проход по набору данных) вычислений, когда необходимо значение, вычисленное на предыдущем шаге.

Яркой особенностью явл. то, что используется тогда, когда подзапросами нереализуемо поскольку заранее неизвестно их кол-во (например, та же генерация чисел Фибоначчи).
andrey_anonymous
Дата: 02.12.2009 18:13:15
dbms_photoshop
andrey_anonymous,
В модели здесь, насколько я понимаю (vava так и не привел пример что он хочет получить)

Привел, привел.
Хочет получить "как в экселе".
Лучше модельки тут вряд ли можно что-то предложить.
Вернее, можно заранее нагенерить views на все возможные операции и чесать репу на тему "какая же view мне нужна сегодня" :) :) :)

Про Фибоначчи: http://www.sql.ru/forum/actualthread.aspx?tid=461297&hl=%f4%e8%e1%ee%ed%e0%f7%f7%e8#4507654
будете пробовать - чуть ниже есть уточнение :)
dbms_photoshop
Дата: 02.12.2009 18:23:21
andrey_anonymous
Хочет получить "как в экселе".

А... ну просто я не шарю "как в экселе".

andrey_anonymous
Про Фибоначчи: http://www.sql.ru/forum/actualthread.aspx?tid=461297&hl=%f4%e8%e1%ee%ed%e0%f7%f7%e8#4507654
будете пробовать - чуть ниже есть уточнение :)

Та все это давно опробовал. :)
Хорошо, пусть будет не Фибоначчи, а рекурсия на скл, где нужно более одного предыдущего члена для генерации текущего. Специально подчеркнул, чтоб Вы не дали мне ссылку на топик RA\\/EN, где Элик дал решение частного случая, а потом была увлекательная дискуссия с В. Бегуном.