powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / один куб или два
25 сообщений из 78, страница 2 из 4
один куб или два
    #32922036
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 OLAPMASTER & Константин Лисянский:

Юрий дайте пример.
В принципе, готов решить и в частном, если Вы поставите условие более формально.


Попробую привести пример:

План:
Год, ПлановаяВыручка
2004, 100

Факт:
Дата, Товар, Город, РекламнаяКампания, Фактическая выручка, Масса
15.02.2004, Пиво Балтика, Москва, Реклама была, 50, 4
24.03.2004, Пиво Сибирская Корона, Рекламы не было, Москва, 30, 5
12.06.2004, Пиво Балтика, Реклама была, Санкт-Петербург, 5, 1

Задача:
Распределить плановую выручку по товарам пропорционально их массе, и при этом плановая выручка по городам должна быть распределена пропорционально фактической выручке. По разрезу (измерению) РекламнаяКампания плановую выручку не распределять, только показать общей суммой в итоговой строке отчета.

Ну как, есть мнения как решить эту задачку без помощи OLAP на уровне вьюшки? Здесь несколько измерений, у каждого - своя база для распределения, и есть противоречие - я считаю, что без использования кубика в плоской вьюшке сделать ничего не удастся.
Также стоит учесть, что в реальных базах данных - серьезные объемы данных.
...
Рейтинг: 0 / 0
один куб или два
    #32922115
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть вопрос и не мне адресован, но все же.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select p.year, f.tovar, f.city, sum(p.plan*(t.f/c.f)*(f.weight/t.w)) new_plan
from
(select year, plan from plan) p,
(select to_number(to_char(data,'YYYY')) year,sum(fact) f
from fact
group by to_number(to_char(data,'YYYY'))) c,
(select to_number(to_char(data,'YYYY')) year,city, sum(fact) f,sum(weight) w
from fact
group by to_number(to_char(data,'YYYY')), city) t,

(select to_number(to_char(data,'YYYY')) year,tovar,city, weight, fact
from  fact) f
where f.year=p.year and 
      f.year=c.year and
      f.year=t.year and f.city=t.city
group by p.year, f.tovar, f.city  
Если я правильно понял ваше "парадоксальное" условие, то ответ будет примерно такой (В Oracle, хотя тут ничего неиспользуется приницпиально ораклового). Я подозреваю, что запрос можно еще упростить.

Результат по вашим данным такой:
Код: plaintext
1.
2.
3.
YEAR	TOVAR			CITY		NEW_PLAN
 2004 	Пиво Балтика		Москва		 41 , 8300653594771 
 2004 	Пиво Сибирская Корона	Москва		 52 , 2875816993464 
 2004 	Пиво Балтика		Санкт Петербург	 5 , 88235294117647 
Если ответ неправильный, покажите какой должен быть правильный и почему.
...
Рейтинг: 0 / 0
один куб или два
    #32922989
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Birkhoff:

Спасибо. А то я тут немного отвлёкся на работу :))
На самом деле, я хотел попросить Юрия, чтобы он сформулировал задачу по правилам форума (CREATE TABLE, INSERT INTO, чтодолжно получиться в результате), но руки не дошли.

Понятно, что ничего сложного в этой Юриной задачке для SQL нету.

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
один куб или два
    #32924206
OLAPMASTER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select p.year, f.tovar, f.city, sum(p.plan*(t.f/c.f)*(f.weight/t.w)) new_plan
from

(select year, plan from plan) p, -- План

(select to_number(to_char(data,'YYYY')) year,sum(fact) f
from fact
--
where to_number(to_char(data,'YYYY')) = 2004
--
group by to_number(to_char(data,'YYYY'))) c, Итого!!! за 2004 год


(select to_number(to_char(data,'YYYY')) year,city, sum(fact) f,sum(weight) w
from fact
--
where to_number(to_char(data,'YYYY')) = 2004
--
group by to_number(to_char(data,'YYYY')), city) t, Выручка по годам за год



(select to_number(to_char(data,'YYYY')) year,tovar,city, weight, fact
from fact) f и сам факт по дням!!

where f.year=p.year and
f.year=c.year and
f.year=t.year and
f.city=t.city

group by p.year, f.tovar, f.city

Ну что добавить могу, Birkhoff это хороший запрос. Правда план наверно сказал тебе MERGE JOIN CARTESIAN?? НУ ВООБЩЕМ ДОБАВИТЬ НИЧЕГО НЕ МОГУ ЕСТЬ ТАКОЙЖЕ ЗАПРОС ТОЛЬКО СБОКУ НАПИСАНЫЙ.
И ЮРА КАКТО ЗАДАЧУ ПОСТАВИЛ СКОЛЬСКО. МОЕ ВИДИНИЕ ТАК:

SELECT FACT_ALL.YEAR,
FACT_ALL.ITEM,
FACT_ALL.CITY,
PLAN.PLAN * (ITEM_WEIGHT / WEIGHT_YEAR) * (CITY_VAL / VAL_YEAR) NEW VAL

(SELECT YEAR, PLAN FROM PLAN) PLAN,

(SELECT YEAR, CITY, SUM(VAL), FROM FACT
GROUP BY YEAR, CITY) CITY_VAL,

(SELECT YEAR, ITEM, SUM(WEIGHT) FROM FACT
GROUP BY YEAR, ITEM) ITEM_WEIGHT,

(SELECT YEAR , SUM(WEIGHT) FROM FACT
GROUP BY YEAR) WEIGHT_YEAR,

(SELECT YEAR, SUM(VAL) FROM FACT
GROUP BY YEAR) VAL_YEAR ,

(SELECT UNIQUE YEAR, CITY, ITEM FROM FACT) FACT_ALL

WHERE PLAN.YEAR = CITY_VAL.YEAR,
AND ITEM_WEIGHT.YEAR = CITY_VAL.YEAR,
AND WEIGHT_YEAR.YEAR = ITEM_WEIGHT.YEAR;,
AND VAL_YEAR.YEAR = WEIGHT_YEAR.YEAR,
AND FACT_ALL.YEAR = VAL_YEAR.YEAR -- НУ ВРОДЕ ВСЕ ГОДА
СОЕДИНИЛ
AND FACT_ALL.CITY = CITY_VAL.CITY
AND FACT_ALL.ITEM = ITEM_WEIGHT.ITEM

Я ТАК ТОЧНО НЕ ПОНЯЛ ЧТО ХОТЕЛ ЮРИЙ ЛИБО ТАК ЛИБО КАК ЭТО СДЕЛАЛ Birkhoff.
...
Рейтинг: 0 / 0
один куб или два
    #32924353
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAPMASTER

Спасибо за замечание, но я ведь говорил что запрос можно усовершенствовать.

Ну а если использовать оракловые фенечки, то переписать (мой) запрос можно например так:
Код: plaintext
1.
2.
3.
4.
select to_number(to_char(data,'YYYY')),tovar, city,
plan.plan*(sum(fact) over (partition by city)/sum(fact) over ())*
(sum(weight) over (partition by city,tovar)/sum(weight) over (partition by city))
from fact,plan
where to_char(fact.data,'YYYY')=plan.year
Результат выдает тот же.
На Юриных данных ему даже GROUP BY не нужен :)
...
Рейтинг: 0 / 0
один куб или два
    #32924389
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Birkhoff:

Если я правильно понял ваше "парадоксальное" условие, то ответ будет примерно такой

Мое условие не парадоксальное, а взятое из жизни.

Если ответ неправильный, покажите какой должен быть правильный и почему

Спасибо за такой красочный SQL-запрос, он сделан изящно, но ответ - неправильный, и тут даже комментировать нечего. Но для тех кто не имеет под рукой калькулятора и не дружит с устным счетом, прокомментирую:
Задача в том, чтобы распределить плановую выручку - 100 единиц по товарам, пропорционально массе. То есть на первую запись приходится (4 * 100)/(4 + 5 + 1) = 40. На вторую - 50. На третью - 10. При этом распределение по городам должно быть пропорционально фактической выручке. То есть на первую запись приходится (50 * 100)/(50 + 30 + 5) = 58.82. На вторую - 35.29. На третью - 5.88.
Как мы видим, имеется противоречие, поскольку базы распределения - разные. Поэтому на уровне плоской вьюшки (SQL-запросом) задачу решить невозможно. Эту задачу можно решить только с помощью OLAP.
...
Рейтинг: 0 / 0
один куб или два
    #32924407
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то я не понял? То есть один запрос должен выводить два распределения одновремнно?
Код: plaintext
1.
2.
3.
4.
select to_number(to_char(data,'YYYY')) YEAR,tovar, city,
plan*weight/sum(weight) over () plan_by_WEIGHT,
plan*fact/sum(fact) over() plan_by_fact
from fact,plan
where to_char(fact.data,'YYYY')=plan.year

В результате получаем
Код: plaintext
1.
2.
3.
YEAR	TOVAR			CITY		PLAN_BY_WEIGHT	PLAN_BY_FACT
 2004 	Пиво Балтика		Москва		 40 		 58 , 8235294117647 
 2004 	Пиво Сибирская Корона	Москва		 50 		 35 , 2941176470588 
 2004 	Пиво Балтика		Санкт Петербург	 10 		 5 , 88235294117647 
Что и требовалось доказать?
ПРосто в первом запросе я сначала считал пропорцию выручки по городам, а потом внутри города делал разнос плана в зависимости от веса товара.
Но тут задача еще проще, просто нужно обсчитать два разных плана.

Объясните, в чем приницпиальное отличие SQL запросов написанных руками от тех, что построены мышкой?
...
Рейтинг: 0 / 0
один куб или два
    #32924435
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuriiКак мы видим, имеется противоречие, поскольку базы распределения - разные. Поэтому на уровне плоской вьюшки (SQL-запросом) задачу решить невозможно. Эту задачу можно решить только с помощью OLAP.

Юра, вы заблуждаетесь. Та задача, что вы обрисовали - подпадает под условие многомерной линейной интерполяции, и ваш подход с действиями на калькуляторе тут не катит. Ибо желаемую точку надо находить двигаясь не поочереди вдоль координатных осей, что вы делаете поочередными действиями на калькуляторе, а одновременно, предварительно рассчитав, вектора, что и делают вышеприведенные SQL запросы.
...
Рейтинг: 0 / 0
один куб или два
    #32925448
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Birkhoff:

Что то я не понял? То есть один запрос должен выводить два распределения одновремнно?

Задача требует, чтобы в зависимости от выбранного среза в отчете использовался тот или иной алгоритм распределения (на основе той или иной базы). В нашей дискуссии обсуждается, можно ли решить эту задачу, написав SQL-запрос. Я считаю - что нельзя, некоторые эксперты по SQL - считают что можно. Думаю шаг за шагом мы приближаемся к ясности, что SQL-запрос для решения этой задачи написать невозможно по определению.

В результате получаем
Что и требовалось доказать?
Но тут задача еще проще, просто нужно обсчитать два разных плана.


Теоретически некоторые правильные цифры Вы получили, но вот только у Вас уже получилось 2 показателя, вместо одной Плановой Выручки... Что будет, если разных баз для распределения в модели будет больше, например 10? Вы сделаете 10 показателей? Ну и наконец, Вы как-то забыли про поле с рекламной кампанией - по ней нельзя распределять Плановую Выручку...

Объясните, в чем приницпиальное отличие SQL запросов написанных руками от тех, что построены мышкой?

Разницы разумеется нет. Просто в данной задаче к решению я прихожу не с помощью SQL-запросов, созданных мышкой, а с помощью проектирования OLAP-куба на основе двух таблиц фактов разной гранулярности. Для каждого измерения OLAP-куба я мышкой указываю базу распределения для показателя Плановая Выручка.

2 backfire:

Юра, вы заблуждаетесь. Та задача, что вы обрисовали - подпадает под условие многомерной линейной интерполяции, и ваш подход с действиями на калькуляторе тут не катит.

Калькулятор я упомянул, поскольку с его помощью можно проверить правильность решения задачи (но я не предлагаю с помощью него решать задачу).
...
Рейтинг: 0 / 0
один куб или два
    #32925993
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий, правильно сказал Константин - нужно было попросить задачу в классическом оформлении - что на входе, что точно на выходе.

А то с каждой итерацией возникают новые условия.

Может быть эту задачу принципиально невозможно решить на компьютере, а только на калькуляторе?
Потому что основная вирутальная вьюшка, которая задает условие находится у вас в голове? :)
Пока "приницпиальная невозможность" ясна только вам.
...
Рейтинг: 0 / 0
один куб или два
    #32926268
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юра, чтобы облегчить теоретическое понимание того, почему это можно сделать с помощью SQL приведу такое соображение, ибо задача, которую Вы ставите, до сих пор не описана формально.
Итак. Многомерное пространство представляется в реляционной БД с помощью так называемой схемы звезда (те самые таблицы фактов, которые Вы используете для кубов). Соответственно, все данные, которые нужны для проведения вычислений, которые нужны для разнесения планов присутствуют в реляционных таблицах.
Возможно, кто-то сказал Вам, что SQL не умеет напрямую адресовать ячейки таблиц в произвольном порядке, и на этом Вы строите свои аргументы.
Однако это не так, с помощью SQL вполне можно адресовать любые ячейки двумерной таблицы (которая, как мы выяснили, реализует многомерную модель). Имея всё это в виду не очень понятно, почему на SQL нельзя реализовать вышеобозначенную операцию.
Ваши аргументы (а точнее их отсутствие), сводятся к тому, что этого не может быть, потому что не может быть никогда.
Учитывая, что Ваше общение с SQL происходит через не в меру интеллектуальный конструктор выражений (который, несмотря на Ваши утверждения, не сможет сгенерировать SQL произвольной сложности, это я утверждаю на основе своей практики, просьба не пенять по поводу того, что я не заказал у Вас соответствующий тренинг, просто не было соответствюущего бюджета :).
И действительно, через построитель запросов Impromptu, действительно, сложно будет построить SQL-запрос, который привели коллеги выше.

Юрий, если у Вас хватит мужества в этом месте признать своё поражение, то, возможно, Вы чуть-чуть поднимете свой рейтинг.
Если будете дальше упираться, у меня есть чувство, что Вас раскатают в лепёшку, поскольку тут сидят, действительно, эксперты (хотя это слово уже немного опошлено здесь, поскольку мелькает слишком часто) в области SQL.


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
один куб или два
    #32926362
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача требует, чтобы в зависимости от выбранного среза в отчете использовался тот или иной алгоритм распределения (на основе той или иной базы).

Этож кто так задачу ставит? Вы сами это придумали или вам это заказчик заказал?

Так такому заказчику в первую очередь надо пройти тренинг по многомерному распределению данных. Хотя если извилина одна и по той катком проехали, то никакой тренинг не поможет.
...
Рейтинг: 0 / 0
один куб или два
    #32926372
OLAPMASTER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BirkhoffOLAPMASTER

Спасибо за замечание, но я ведь говорил что запрос можно усовершенствовать.

Ну а если использовать оракловые фенечки, то переписать (мой) запрос можно например так:
Код: plaintext
1.
2.
3.
4.
select to_number(to_char(data,'YYYY')),tovar, city,
plan.plan*(sum(fact) over (partition by city)/sum(fact) over ())*
(sum(weight) over (partition by city,tovar)/sum(weight) over (partition by city))
from fact,plan
where to_char(fact.data,'YYYY')=plan.year
Результат выдает тот же.
На Юриных данных ему даже GROUP BY не нужен :)
Классный запрос, over (partition by city) такой связкой я считал нарастающий итог.
Юрий, ну даже если мы с помошью over (partition by) не можем написать этот чудо запрос, то мы может прибегнуть к PL/SQL и тогда Ваша задача решаеться очень просто. Если Вы не знаете что это такое, то это язык программирования где можно пошагово разобрать каждую запись и понять что и сней делать, так что я думаю в этом проблем не будет.

Birkhoff
??? Спасибо за замечание ???

Это не замечание, просто интересно как оптимизатор будет это выполнят.
Так он декартовым произведением пошел?
...
Рейтинг: 0 / 0
один куб или два
    #32926461
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAPMASTERмы может прибегнуть к PL/SQL

Ну, это будет не совсем правильно. Речь идёт о решении задачи одним запросом.

С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
один куб или два
    #32926510
OLAPMASTER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Лисянский OLAPMASTERмы может прибегнуть к PL/SQL

Ну, это будет не совсем правильно. Речь идёт о решении задачи одним запросом.

С уважением,
Константин Лисянский
http://lissianski.narod.ru

Константин я конечно понимаю FAIR PLAY. Но Юрий непонятно ставит задачу и всетаки важно достежения результата и если Юрию потребуеться постоить аж целый куб что бы ее решит, то я думаю анонимный блок PL/SQL который вставит записи в табличку это вполне честно. Примеры которые были приведены выше решали задачу Юрия. Если он с этим не согласен, пусть точнее поставить задачу.

P.S. на войне все средства хороши.
...
Рейтинг: 0 / 0
один куб или два
    #32926577
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAPMASTERBirkhoff
??? Спасибо за замечание ???

Это не замечание, просто интересно как оптимизатор будет это выполнят.
Так он декартовым произведением пошел?А я понял комментарий как замечание :)
И действительно присмотрелся и нашел как можно обойтись без внешнего Group by. Хотя cost запроса остался такой же. Но видимо это зависит еще и от объемов.
Да, был декартов джойн.
...
Рейтинг: 0 / 0
один куб или два
    #32926855
OLAPMASTER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Birkhoff OLAPMASTERBirkhoff
??? Спасибо за замечание ???

Это не замечание, просто интересно как оптимизатор будет это выполнят.
Так он декартовым произведением пошел?А я понял комментарий как замечание :)
И действительно присмотрелся и нашел как можно обойтись без внешнего Group by. Хотя cost запроса остался такой же. Но видимо это зависит еще и от объемов.
Да, был декартов джойн.

Поправь меня если я не прав но over (partition by) он понимает как Group by да?? Или как то по другому работает??
...
Рейтинг: 0 / 0
один куб или два
    #32927161
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 all SQL Experts:

Господа, давайте будем закруглять дискуссию, придем к консенсусу.
Представьте, что у нас есть кубик - в нем 5 измерений по 100 элементов в каждом. Средствами многомерного моделирования можно совместить в кубе несколько таблиц фактов (факт, план, прогноз и т.п.) и разнести агрегированные значения на детальные уровни иерархии.

Любое число из этого куба можно вычислить с помощью SQL-запроса, написанного ручками. Можно и всю многомерную модель представить в виде плоской вьюшки. Но представьте, что это будет за вьюшка - в ней будет 10 миллиардов строк...

Так что предлагаю сделать такой вывод - теоретически SQL-запрос написать можно, но он будет медленно работать, и его юзабилити будет нулевым. Поэтому на практике стоит решать эту задачу с помощью MOLAP.
Что касается правильной формулировки задачи - я подумаю, постараюсь ее сформулировать, чтобы всем было понятно, но думаю и сейчас всем это понятно.
...
Рейтинг: 0 / 0
один куб или два
    #32927180
олапист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jurii2 all SQL Experts:

Господа, давайте будем закруглять дискуссию, придем к консенсусу.
Представьте, что у нас есть кубик - в нем 5 измерений по 100 элементов в каждом. Средствами многомерного моделирования можно совместить в кубе несколько таблиц фактов (факт, план, прогноз и т.п.) и разнести агрегированные значения на детальные уровни иерархии.

Любое число из этого куба можно вычислить с помощью SQL-запроса, написанного ручками. Можно и всю многомерную модель представить в виде плоской вьюшки. Но представьте, что это будет за вьюшка - в ней будет 10 миллиардов строк...

Так что предлагаю сделать такой вывод - теоретически SQL-запрос написать можно, но он будет медленно работать, и его юзабилити будет нулевым. Поэтому на практике стоит решать эту задачу с помощью MOLAP.
Что касается правильной формулировки задачи - я подумаю, постараюсь ее сформулировать, чтобы всем было понятно, но думаю и сейчас всем это понятно.

и опять Вы как всегда неправы на счет медленной работы запросов
к Вашему сведению в современных СУБД есть такой модуль как оптимизатор запросов, который не будет без крайней надобности вытягивать по 10 миллиардов строк
это тоже стоит обьяснить Вам подробнее?
...
Рейтинг: 0 / 0
один куб или два
    #32927290
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuriiТак что предлагаю сделать такой вывод - теоретически SQL-запрос написать можно, но он будет медленно работать, и его юзабилити будет нулевым. Поэтому на практике стоит решать эту задачу с помощью MOLAP.
Что касается правильной формулировки задачи - я подумаю, постараюсь ее сформулировать, чтобы всем было понятно, но думаю и сейчас всем это понятно.

Юра, я хоть и не причисляю себя к экпертам SQL и являюсь приверженцем (M)OLAP, но тут с вами категорически не соглашусь.

С чего вы взяли, что все эти 10 миллиардов кому то разом понадобятся?
С чего вы взяли, что запросы на распределение будут тормозить?

Все это голословно. Тем более из ваших уст. (вы себя никак не показали что вы DWH/ROLAP/SQL эксперт).

Вы просто не делали на SQL ничего серьезного и у вас предубеждение, что SQL это "каменный век, когда колеса еще не были круглыми". Каждый инсртрумент в руках мастера способен творить чудеса. И не надо хаять SQL, просто потому что он вам не по-душе и вы предпочитаете мышку клавиатуре.
...
Рейтинг: 0 / 0
один куб или два
    #32927292
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
олаписти опять Вы как всегда неправы на счет медленной работы запросов
к Вашему сведению в современных СУБД есть такой модуль как оптимизатор запросов, который не будет без крайней надобности вытягивать по 10 миллиардов строк
это тоже стоит обьяснить Вам подробнее?

Просто объяснить в форуме мало - надо тренинг пройти. :-)
...
Рейтинг: 0 / 0
один куб или два
    #32928149
Angel13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 OLAPMASTER
Поддерживаю SQL это рульная штука! Я даже могу нарастающий итог посчитать на диалекте Oracle

Классный запрос, over (partition by city) такой связкой я считал нарастающий итог.


А что используя ANSI SQL посчитать нарастающий итог нельзя?
...
Рейтинг: 0 / 0
один куб или два
    #32928350
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angel132 OLAPMASTER
Поддерживаю SQL это рульная штука! Я даже могу нарастающий итог посчитать на диалекте Oracle

Классный запрос, over (partition by city) такой связкой я считал нарастающий итог.


А что используя ANSI SQL посчитать нарастающий итог нельзя?
Можно, но так меньше писать. :)
Да и оптимизатор думаю так эффективнее работает.
...
Рейтинг: 0 / 0
один куб или два
    #32928895
OLAPMASTER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angel132 OLAPMASTER
Поддерживаю SQL это рульная штука! Я даже могу нарастающий итог посчитать на диалекте Oracle

Классный запрос, over (partition by city) такой связкой я считал нарастающий итог.


А что используя ANSI SQL посчитать нарастающий итог нельзя?

Я поправлю Birkhoff, дело в том что нарастающий итог на ANSI SQL только по первичному ключу с подзапросом. Тоесть вы в нутри запроса двигаясь по записям, находите меньшие значения первичного ключа и делаете sum от текушего к меньшему.
Это очень медленно если на большой таблице но это возможно, но а если у вас не первичного ключа то я незнаю как возможно посчитать нарастающий итог. Даже немогу предположить. Может Birkhoff у тебя уже есть опыт написания подобного запроса, я бы с удовольствием посмотрел на него.
...
Рейтинг: 0 / 0
один куб или два
    #32928981
Angel13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAPMASTERЯ поправлю Birkhoff, дело в том что нарастающий итог на ANSI SQL только по первичному ключу с подзапросом. Тоесть вы в нутри запроса двигаясь по записям, находите меньшие значения первичного ключа и делаете sum от текушего к меньшему

Зачем же вложенный подзапрос? можно и просто JOIN'ом.

select T1.USERNAME, T1.USER_ID, sum(T2.USER_ID)
from DBA_USERS T1
join DBA_USERS T2 on T1.USERNAME >= T2.USERNAME
group by T1.USERNAME, T1.USER_ID
order by 1

-- выполнять на Oracle.
Но согласен, что аналитические функции будут работать быстрее. Сам Кайт об этом писал :)
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 2 из 4
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / один куб или два
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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