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

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

rownum

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

....
stax
...
Рейтинг: 0 / 0
26.06.2019, 11:15
    #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
26.06.2019, 11:16
    #39830631
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очередное разбиение по группам
dMazay82Суть в том что бы разбить выборку по N элементов (пусть это будет 4), при этом каждая группа может содержать несколько req, но req не должны быть разбиты по разным группам Разделить количество бананов в упаковке по корзинам - buckets
...
Рейтинг: 0 / 0
26.06.2019, 11:19
    #39830633
dMazay82
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очередное разбиение по группам
Stax,

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

dmdmdm,

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


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

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


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

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

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

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

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

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

AmKad,
Специально пример сделал
...
Рейтинг: 0 / 0
26.06.2019, 17:46
    #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
27.06.2019, 07:50
    #39830945
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очередное разбиение по группам
Кобанчег
Код: plsql
1.
 decode(cnt, 2, null, rn), cnt desc) ord

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

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


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