powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает нарастающий итог, в чём дело?
17 сообщений из 17, страница 1 из 1
Не работает нарастающий итог, в чём дело?
    #39367865
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый, товарищи!
Имеется задачка на ABC-анализ.
Есть две таблицы. См. вложение эксель.
Первая таблица содержит справочную информацию(категория, продукт, цена)
Вторая таблица содержит информацию непосредственно о всех продажах за период. То-есть для моей задачи первая таблица нужна только для того чтобы выдрать оттуда цену, для расчета оборотов(PRICE*SALES_QNTY - цена*кол-во_товаров), и дальнейшего АБЦ-анализа.
Мой запрос сейчас выглядит вот так.
:Select
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Select LEFT(s.month,4) as year, s.store_format, s.product, s.SALES_QNTY as 'Кол-во продаж'
--,sum(s.SALES_QNTY) over() as 'Продано товаров'
--,100. *s.SALES_QNTY/sum(s.SALES_QNTY) over() as 'Доля товаров'
--,100. *sum(ss.SALES_QNTY)/sum(s.SALES_QNTY) over() as 'Доля товаров нараст'
,price*s.SALES_QNTY as 'Прибыль'
,100. *price*s.SALES_QNTY/sum(price*s.SALES_QNTY) over() as 'Доля прибыли'
,100. *sum(price*ss.SALES_QNTY)/sum(price*s.SALES_QNTY) over() as 'Доля прибыли нарастающ'
,case 
	when 100. *sum(ss.SALES_QNTY)/sum(s.SALES_QNTY) over() > 95  then 'C'
	when 100. *sum(ss.SALES_QNTY)/sum(s.SALES_QNTY) over() > 80  then 'B'
	else 'A'
end as ABC_QNTY
,case
	when 100. *sum(price*ss.SALES_QNTY)/sum(price*s.SALES_QNTY) over() > 95  then 'C'
	when 100. *sum(price*ss.SALES_QNTY)/sum(price*s.SALES_QNTY) over() > 80  then 'B'
	else 'A'
end as ABC_RUB

	from sale s, sale ss, sprav sp
	where 
	ss.SALES_QNTY>=s.SALES_QNTY and 
	sp.PRODUCT=s.PRODUCT 
	group by LEFT(s.month,4), s.store_format, s.product, s.SALES_QNTY,price
	--order by 'Доля товаров' desc
	order by 'Прибыль' desc



Во втором кейсе как раз должен происходить АБЦ-анализ по обороту в рублях. Он работает некорректно, так как я не могу построить нарастающий итог по столбцу 'Доля прибыли нарастающ'.
Первый же кейс, где происходит АБЦ-анализ по обороту в штуках(затронута всего 1 таблица), нарастающий итог работает прекрасно, если раскоментировать "--order by 'Доля товаров' desc".

Подскажите плиз, где ошибка?
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367892
Rust_Cohle,

Для того, чтобы посчитать нарастающий итог, надо понимать в каком порядке его наращивать.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367897
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в сортировке,
вторая строка=вторая+первая, третья=третья+вторая+первая и т д. Стандартный нарастающий итог.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367900
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust_Cohle Дело в сортировке,
вторая строка=вторая+первая, третья=третья+вторая+первая и т д. Стандартный нарастающий итог.У строк нет порядка, пока ты его сам явно не задашь
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367913
помогу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rust_Cohle,

сделаю за деньги.


Почта: sqlhelper2@gmail.com
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367916
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ORA__SQL,
Ну вот смотрите, Выводимый столбец 'Доля прибыли' Идет корректно по убыванию, сумма всех строк по нему составляет 100%. Я далее хочу вывести нарастающий итог этой Доли прибыли(по той же аналогии, что и Долей товаров). Но в отличии от второго, нарастающий итог выводит хрень, начиная вообще со 171%, местами за 200.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367923
Вместо over() в запросе укажи over(order by <Критерий_нарастания_итога>)
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367929
помогу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в сортировке, руки прочь от моего клиента!
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367935
помогу, ты ему потом поможешь еще один этаж достроить. Мои интересы дальше сортировки не распространяются.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367941
помогу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в сортировке,

хорошо, тебе за сортировку полагается 10% от стоимости заказа.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39367962
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust_Cohle,

ORDER BY селекта не распространяется как ORDER BY аналитических функций. Он должeн бть задан явно иначе вычисляется значение для всего окна. Посколько в селекте order by price*s.SALES_QNTY, то прeдположу:

Код: plsql
1.
,100. *sum(price*ss.SALES_QNTY)/sum(price*s.SALES_QNTY) over(order by price*s.SALES_QNTY) as 'Доля прибыли нарастающ'



SY.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368046
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

чёт если я начинаю использовать order by аналитической функции(какие угодно поля перепробовал) заместо общего order by, у меня начинает рушиться весь запрос. Но ведь почему же, когда я считаю тем же способом доли товаров - все работает.(естественно меняя общий ордер бай). Кстати прошу обратить внимание на условие в поле where, именно благодаря ему у меня и идет нарастающий итог по товарам.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368548
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кароче, я сам разобрался. Выкладываю готовый рабочий вариант БЕСПЛАТНО, может кому поможет. А то смотрю бизнесменов развелось вокруг.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Select 
t.year
,t.store_format
,t.category
,t.product
--,SALES_QNTY
--,t.Dolya_Tovarov
--,100. *t.Summa_prodazh/t.VSEGO_PRODAZH as procent_qnty
--,t.ranks_ABC_QNTY
      ,case
			when 100. *t.Summa_prodazh/t.VSEGO_PRODAZH < 80 then 'A'
			when 100. *t.Summa_prodazh/t.VSEGO_PRODAZH between 80 and 95 then 'B'
      else 'C' end as ABC_QNTY
--,t.Dolya_Pribili
--,100. *t.Summa_pribili/t.VSEGO_PRIBIL as procent_rub
--,t.ranks_ABC_RUB
	   ,case
			when 100. *t.Summa_pribili/t.VSEGO_PRIBIL < 80 then 'A'
			when 100. *t.Summa_pribili/t.VSEGO_PRIBIL between 80 and 95 then 'B'
      else 'C' end as ABC_RUB
from (SELECT	LEFT(month,4) as year, s.store_format, sp.category, s.product
				,SALES_QNTY
				,100. *SALES_QNTY/sum(SALES_QNTY) over() as Dolya_Tovarov
				,sum(SALES_QNTY) over(order by SALES_QNTY DESC) as Summa_prodazh
				,rank() over(order by SALES_QNTY DESC) as ranks_ABC_QNTY
				,sum(SALES_QNTY) over() as VSEGO_PRODAZH
				,100. *PRICE*SALES_QNTY/sum(PRICE*SALES_QNTY) over() as Dolya_Pribili
				,sum(PRICE*SALES_QNTY) over(order by PRICE*SALES_QNTY DESC) as Summa_pribili
				,rank() over(order by PRICE*SALES_QNTY DESC) as ranks_ABC_RUB
				,sum(PRICE*SALES_QNTY) over() as VSEGO_PRIBIL
       FROM  sale s left join sprav sp ON sp.PRODUCT=s.PRODUCT
     ) as t
order by year


...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368583
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust_Cohle,

авторVSEGO_PRIBIL да вы батенька маньяк


И на какой же версии Oracle это будет работать?
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368587
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust_CohleВыкладываю готовый рабочий вариант БЕСПЛАТНО, может кому поможет.Конечно заюзаем. Пример самый что ни на есть юзабельный. И схема данных описана, и постановка задачи, и наименование объектов стандартизованное - все мы такое используем. Просто бери запрос и копируй в свою систему - скомпилится без единой ошибки.

P.S. И еще, тут форум по ораклу, а запрос твой по ходу MS SQL-ный.
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368616
Rust_Cohle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,
Человеку будет важна логика работы запроса, на основании которой он сделает свою задачу. А не под копирку мой вариант ;)
...
Рейтинг: 0 / 0
Не работает нарастающий итог, в чём дело?
    #39368730
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust_Cohle,
ты правда считаешь что ты один такой умный?) это у тебя мозгов не хватило найти похожие темы на этом форуме. и твой запрос всего лишь еще один... в длинном ряду.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает нарастающий итог, в чём дело?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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