powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / группировка групп
6 сообщений из 6, страница 1 из 1
группировка групп
    #34987236
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
появилась неоходимость сделать следующее.
Запросик

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t (i, g, v) as (
values 
 ( 1 , 1 ,  1 )
,( 2 , 1 , 1 )
,( 3 , 1 , 1 )
,( 4 , 2 , 1 )
,( 5 , 2 , 1 )
,( 6 , 2 , 1 )
,( 7 , 3 , 1 )
,( 8 , 3 , 1 )
,( 9 , 1 , 1 )
,( 10 , 1 , 1 )
,( 11 , 4 , 1 )
,( 12 , 4 , 1 )
)
select t.*  
,SUM(v) OVER(PARTITION BY g ORDER BY i ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) sum
from t t
order by i

Выводит результат сумму с наростающим итогом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
i	g	v	sum
 1 	 1 	 1 	 1 
 2 	 1 	 1 	 2 
 3 	 1 	 1 	 3 
 4 	 2 	 1 	 1 
 5 	 2 	 1 	 2 
 6 	 2 	 1 	 3 
 7 	 3 	 1 	 1 
 8 	 3 	 1 	 2 
 9 	 1 	 1 	 4 
 10 	 1 	 1 	 5 
 11 	 4 	 1 	 1 
 12 	 4 	 1 	 2 
как бы сделать так, чтобы сумма считалась по группам g с учетом сортировки
т.е. строки (9,10) были не (4,5) а (1,2)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
i	g	v	sum
 1 	 1 	 1 	 1 
 2 	 1 	 1 	 2 
 3 	 1 	 1 	 3 
 4 	 2 	 1 	 1 
 5 	 2 	 1 	 2 
 6 	 2 	 1 	 3 
 7 	 3 	 1 	 1 
 8 	 3 	 1 	 2 
 9 	 1 	 1 	 1 
 10 	 1 	 1 	 2 
 11 	 4 	 1 	 1 
 12 	 4 	 1 	 2 
никак не могу пронумировать группы с учетом сортировки
...
Рейтинг: 0 / 0
группировка групп
    #34987981
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Вы хотите сделать так, что по любой группе, если i=9 или 10, то, фактически, организовывалась бы новая независимая группа?
Тогда
Код: plaintext
,SUM(v) OVER(PARTITION BY g, case when i in ( 9 , 10 ) then  1  else  2  end ORDER BY i) sum
Если нет, что опишите подробнее, что вы хотите.
...
Рейтинг: 0 / 0
группировка групп
    #34989890
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема как раз в том, что я не могу определить местоположение групп в наборе.
Групп сколь угодно много, и они расположены в порядке заданном полем i поэтому условие
Код: plaintext
1.
case when i in ( 9 , 10 ) then  1  else  2  end 
должно быть вычисляемым. И выяснить его можно (если можно) только после упорядочивания по полю i.
Вычислить можно, например, так:
Код: plaintext
1.
case when max(g) OVER(ORDER BY i ROWS BETWEEN  1  PRECEDING AND  1  PRECEDING )= g then значение ch из предыдущей строки else новое значение ch end ch
но и здесь свои сложности.

потихоньку отказываюсь от этой идеи :)
...
Рейтинг: 0 / 0
группировка групп
    #34990176
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with t (i, g, v) as (
values 
 ( 1 , 1 ,  1 )
,( 2 , 1 , 1 )
,( 3 , 1 , 1 )
,( 4 , 2 , 1 )
,( 5 , 2 , 1 )
,( 6 , 2 , 1 )
,( 7 , 3 , 1 )
,( 8 , 3 , 1 )
,( 9 , 1 , 1 )
,( 10 , 1 , 1 )
,( 11 , 4 , 1 )
,( 12 , 4 , 1 )
)
, a as (
select t.*  
, sum(case when exists (select  1  from t t2 where t2.g=t.g and t2.i=t.i- 1 ) then  0  else  1  end) 
 over(partition by g order by i) g1
from t t
)
select a.*, sum(v) over(partition by g, g1 order by i) s
from a
order by i
...
Рейтинг: 0 / 0
группировка групп
    #34992987
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Mark!
Вы мне очень помогли. Куда слать пиво?

Еще один вопросик.
Если группы нумеровать не так:
Код: plaintext
1.
2.
, sum(case when exists (select  1  from t t2 where t2.g=t.g and t2.i=t.i- 1 ) then  0  else  1  end) 
 over(partition by g order by i) g1
а так:
Код: plaintext
1.
2.
, sum(case when max(g) OVER(ORDER BY i ROWS BETWEEN  1  PRECEDING AND  1  PRECEDING ) = g then  0  else  1  end)
 over(partition by g order by i) g2
Запрос вроде выполняется быстрее (планы в файле)
Не изменится ли картина на больших объемах?
...
Рейтинг: 0 / 0
группировка групп
    #34993257
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что и на бОльших объемах ваш вариант будет лучше.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / группировка групп
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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