Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересный select / 17 сообщений из 17, страница 1 из 1
19.01.2021, 10:56
    #40037033
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
Доброго дня!

Нужно сгруппировать две колонки таблицы и получить результат через запятую.
Вопрос как получить минимальное число строк результата.

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
with
  T as
  (
    select '1' A, '5' B from Dual union all
    select '2' A, '5' B from Dual union all
    select '3' A, '5' B from Dual union all
    select '1' A, '6' B from Dual union all
    select '2' A, '6' B from Dual union all
    select '3' A, '6' B from Dual union all
    select '1' A, '7' B from Dual union all
    select '2' A, '7' B from Dual union all
    select '4' A, '7' B from Dual union all

    select 'E' A, 'A' B from Dual union all
    select 'E' A, 'B' B from Dual union all
    select 'E' A, 'C' B from Dual union all
    select 'F' A, 'A' B from Dual union all
    select 'F' A, 'B' B from Dual union all
    select 'F' A, 'C' B from Dual union all
    select 'G' A, 'A' B from Dual union all
    select 'G' A, 'B' B from Dual union all
    select 'G' A, 'D' B from Dual
  ),
  GroupByA as
  (
    select A, ListAgg(B, ', ') within group(order by B) B
    from T
    group by A
  ),
  GroupByB as
  (
    select ListAgg(A, ', ') within group(order by A) A, B
    from T
    group by B
  )
select 'Group By A' Type, A, B
from GroupByA
union all
select 'Group By B' Type, A, B
from GroupByB
union all
select 'Group By A, B' Type, ListAgg(A, ', ') within group(order by A) A, B
from GroupByA
group by B
union all
select 'Group By B, A' Type, A, ListAgg(B, ', ') within group(order by B) B
from GroupByB
group by A
order by Type, A, B
/



Пояснение:
Group By A - промежуточный результат
Group By B - промежуточный результат
Group By A, B - окончательный результат (вариант 1)
Group By B, A - окончательный результат (вариант 2)

Как видно оба варианта не дают минимальное число строк.
...
Рейтинг: 0 / 0
19.01.2021, 11:00
    #40037036
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
Цель какая? Убери груп бай и сделай два агрегата - будет минимальная одна строка.

упд. Или добавь к любому из своих запросов where 1 = 0, будет ещё меньше.
...
Рейтинг: 0 / 0
19.01.2021, 11:03
    #40037039
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
env,

Должно сохраняться соответствие между колонками
...
Рейтинг: 0 / 0
19.01.2021, 11:12
    #40037042
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
Ничего не понятно. Покажи, какой результат нужно получить (с комментариями).
...
Рейтинг: 0 / 0
19.01.2021, 11:17
    #40037047
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
PuM256,

Нужно получить 4 строки:
Код: plaintext
1.
2.
3.
E, F	A, B, C
G	A, B, D
1, 2, 3	5, 6
1, 2, 4	7
...
Рейтинг: 0 / 0
19.01.2021, 11:24
    #40037053
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
PuM256,

Вариант Group By A, B дает 5 строк (2 с буквами и 3 с цифрами)
Вариант Group By B, A дает 5 строк (3 с буквами и 2 с цифрами)
...
Рейтинг: 0 / 0
19.01.2021, 11:25
    #40037054
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
YBZ,

Реальная задача какая?
...
Рейтинг: 0 / 0
19.01.2021, 11:34
    #40037059
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
env,

В колонке A - программы страхования
В колонке B - лечебные учреждения

Нужно в Дополнительном соглашении писать:
с 01.01.2020 включить в договор страхования "Программа 1" с обслуживанием в "ЛПУ 1".
с 01.01.2020 включить в договор страхования "Программа 1" с обслуживанием в "ЛПУ 2".
с 01.01.2020 включить в договор страхования "Программа 2" с обслуживанием в "ЛПУ 1".
с 01.01.2020 включить в договор страхования "Программа 2" с обслуживанием в "ЛПУ 2".
Тоже самое:
с 01.01.2020 включить в договор страхования "Программа 1", "Программа 2" с обслуживанием в "ЛПУ 1", "ЛПУ 2".
...
Рейтинг: 0 / 0
19.01.2021, 11:37
    #40037060
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
И она не решается двумя listagg после соответствующего where?

упд. сам спросил, сам и отвечу. Не решается , если есть "Программа 1" с обслуживанием в "ЛПУ 3".
...
Рейтинг: 0 / 0
19.01.2021, 11:39
    #40037063
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
env,

Можно решение?
...
Рейтинг: 0 / 0
19.01.2021, 19:30
    #40037260
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
Может есть решение?
...
Рейтинг: 0 / 0
20.01.2021, 00:24
    #40037296
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
YBZ,

для начала скажи - есть данные в нормализованном виде?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with Programs as(
select 1 id, 'Программа 1' name from dual union all
select 2 id, 'Программа 2' from dual union all
select 3 id, 'Программа 3' from dual union all
select 4 id, 'Программа 4' from dual union all
select 5 id, 'Программа 5' from dual union all
select 6 id, 'Программа 6' from dual
),
Institution as(
select 1 id, 'ЛПУ-1' name from dual union all
select 2 id, 'ЛПУ-2' name from dual union all
select 3 id, 'ЛПУ-3' name from dual
),
relations as
(
select 1 ProgramsId, 1 InstitutionId from dual union all
select 1 ProgramsId, 2 InstitutionId from dual union all
select 2 ProgramsId, 1 InstitutionId from dual
)
...
Рейтинг: 0 / 0
20.01.2021, 09:51
    #40037345
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
YBZ,

Кардинальность программ и ЛПУ одинаковая или всё-таки есть перекос в стоорону ЛПУ?
...
Рейтинг: 0 / 0
20.01.2021, 15:18
    #40037499
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
andreymx,

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
with
  T as
  (
    select '1' A, '5' B from Dual union all
    select '2' A, '5' B from Dual union all
    select '3' A, '5' B from Dual union all
    select '1' A, '6' B from Dual union all
    select '2' A, '6' B from Dual union all
    select '3' A, '6' B from Dual union all
    select '1' A, '7' B from Dual union all
    select '2' A, '7' B from Dual union all
    select '4' A, '7' B from Dual union all

    select 'E' A, 'A' B from Dual union all
    select 'E' A, 'B' B from Dual union all
    select 'E' A, 'C' B from Dual union all
    select 'F' A, 'A' B from Dual union all
    select 'F' A, 'B' B from Dual union all
    select 'F' A, 'C' B from Dual union all
    select 'G' A, 'A' B from Dual union all
    select 'G' A, 'B' B from Dual union all
    select 'G' A, 'D' B from Dual
  ),
  Programs as
  (
    select RowNum ID, A, 'Программа ' || A Name
    from
    (
      select distinct A
      from T
    )
  ),
  Institution as
  (
    select RowNum ID, B, 'ЛПУ ' || B Name
    from
    (
      select distinct B
      from T
    )
  ),
  Relations as
  (
    select P.ID ProgramsId, I.ID InstitutionId
    from T
    join Programs    P on P.A = T.A
    join Institution I on I.B = T.B
  )
...
Рейтинг: 0 / 0
20.01.2021, 15:21
    #40037501
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
env,

Не понял вопрос.
В общем случае ЛПУ в разы больше, чем программ.
...
Рейтинг: 0 / 0
20.01.2021, 15:36
    #40037508
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
YBZ
В общем случае ЛПУ в разы больше, чем программ

YBZGroup By A, B

С точки зрения конечного пользователя, при таком перевесе, удобнее видеть список программ, где пересечение по ЛПУ полное, и отдельно программы, не пересекающиеся с другими по списку ЛПУ.
...
Рейтинг: 0 / 0
20.01.2021, 23:50
    #40037617
YBZ
YBZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный select
env
С точки зрения конечного пользователя, при таком перевесе, удобнее видеть список программ, где пересечение по ЛПУ полное, и отдельно программы, не пересекающиеся с другими по списку ЛПУ.


Возможно Вы правы.

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


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