powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Очередное разбиение по группам
18 сообщений из 18, страница 1 из 1
Очередное разбиение по группам
    #39830620
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Есть выборка например
reqvalreq11req111req22req222req2222req33req33
Как разбить ее по группам по req но не более 4 элементов, те, что бы получилось
reqval grpreq111req1111req331req331req222req2222req22222
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830621
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82,

тема про "не более 4 элементов" - не раскрыта
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830625
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82,

rownum

Щукина Аннатема про "не более 4 элементов" - не раскрытаИли не раскрыта тема "группам по req".
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830627
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть в том что бы разбить выборку по N элементов (пусть это будет 4), при этом каждая группа может содержать несколько req, но req не должны быть разбиты по разным группам
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830629
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82 но req не должны быть разбиты по разным группам
req больше 4-х может быть?

....
stax
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830630
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое GRP в выходных данных, пока непонятно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t(req, val) as (
select 'req1' , 1 from dual union all
select 'req1' , 11 from dual union all
select 'req1' , 2 from dual union all
select 'req2' , 2 from dual union all
select 'req2' , 22 from dual union all
select 'req3' , 1 from dual union all
select 'req4' , 1 from dual union all
select 'req4' , 2 from dual union all
select 'req4' , 3 from dual union all
select 'req4' , 4 from dual union all
select 'req4' , 5 from dual
)

select req, val, count(1) over(partition by req order by req) val_cnt  from t
group by req, val
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830631
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82Суть в том что бы разбить выборку по N элементов (пусть это будет 4), при этом каждая группа может содержать несколько req, но req не должны быть разбиты по разным группам Разделить количество бананов в упаковке по корзинам - buckets
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830633
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

считаем что req не может содержать более N(4) Элементов

dmdmdm,

Номер группы после разбиения
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830637
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82req не должны быть разбиты по разным группамdense_rank
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830640
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,


reg1 и reg3 в одной группе

імхо, упаковивать (перебирать) надо


....
stax
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830641
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxreg1 и reg3 в одной группеКаждый req в своей группе полностью удовлетворяет постановке "не более 4х и не разбивать".
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830642
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

надо минимизировать количество групп
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830654
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82надо минимизировать количество группЛюблю такие темы. Краткость постановщика - сестра таланта. А потом по ходу двустраничной темы вытягивай из него условия задачи.
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830668
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

я понял как
минимальное число корзин(рюбзаков) при вместимости 4

ps
предметов "тяжелее" 4 нет

....
stax
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830669
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Да правильно,

AmKad,
Специально пример сделал
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830826
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82не более 4 элементовЕсли решение требуется только для этого волшебного числа, то оно тривиальное.
Распределяешь по следующей схеме
1. Группы 3 + 1
2. Группы где только тройки (если троек больше единиц)
3. Группы где все остальное. Максимум будет одна неполная группа.

На PL/SQL будет просто однопроходный алгоритм с линейной сложностью.
На SQL требуется сортировка.
Код: plsql
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.
with t(req, cnt) as 
(
select 1, 3 from dual 
union all select 2, 3 from dual
union all select 3, 3 from dual
union all select 4, 3 from dual
union all select 5, 2 from dual
union all select 6, 2 from dual
union all select 7, 2 from dual
union all select 8, 2 from dual
union all select 9, 2 from dual
union all select 10, 1 from dual
union all select 11, 1 from dual
union all select 12, 1 from dual
union all select 13, 1 from dual
union all select 14, 1 from dual
union all select 15, 1 from dual
)
select bkt, req, cnt
  from (select row_number() over (order by decode(cnt, 2, null, rn), cnt desc) ord, t0.*
          from (select t.*, row_number() over (partition by cnt order by req) rn from t) t0)
match_recognize
(
  order by ord
  measures
    match_number() bkt
  all rows per match
  pattern (x+)
  define
    x as sum(cnt) <= 4
)
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830945
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег
Код: plsql
1.
 decode(cnt, 2, null, rn), cnt desc) ord

При более десятка единичек может выстрелить.
...
Рейтинг: 0 / 0
Очередное разбиение по группам
    #39830978
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Да уж, коварный косяк.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Очередное разбиение по группам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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