powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select
25 сообщений из 49, страница 1 из 2
Помогите написать select
    #39571752
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица
ID C1 C2
1 A B
1 C D
1 E F
2 G H
3 I J
3 K L
4 A B
4 C D
4 E F

Необходимо выбрать ID для полностью одинаковых наборов (без учета порядка строк), например, для моего примера должны быть выбраны ID 1 и 4.
...
Рейтинг: 0 / 0
Помогите написать select
    #39571765
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сгруппируй по всем полям и выведи ID?

Проблема в чем?
...
Рейтинг: 0 / 0
Помогите написать select
    #39571767
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ having(count(id))>1
...
Рейтинг: 0 / 0
Помогите написать select
    #39571799
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71,
Код: plsql
1.
2.
select id, c1, c2 from table t1 
where exists (select * from table t2 where t2.c1 = t1.c1 and t2.c2 = t1.c2 and t2.id <> t1.id)
...
Рейтинг: 0 / 0
Помогите написать select
    #39571806
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo, забавно)) попробуйте выполнить свой запрос...
...
Рейтинг: 0 / 0
Помогите написать select
    #39571810
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕРDshedoo, забавно)) попробуйте выполнить свой запрос...

А что не так?
Возвращает набор строк, где разные ID и одинаковые буквы.
Если ему нужны будут просто 2 ID, то он всегда может переписать на distinct ID.
...
Рейтинг: 0 / 0
Помогите написать select
    #39571812
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,

для случая

ID C1 C2
1 A B
1 C D
1 E F
2 G H
3 I J
3 K L
4 A B
4 C D

Ваш запрос отдаст 1 и 4, хотя не должен отдать ничего.
...
Рейтинг: 0 / 0
Помогите написать select
    #39571815
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71Dshedoo,

для случая

ID C1 C2
1 A B
1 C D
1 E F
2 G H
3 I J
3 K L
4 A B
4 C D

Ваш запрос отдаст 1 и 4, хотя не должен отдать ничего.
Святые воробушки, это вам в универе такие задачки задают? Они там озверели?
...
Рейтинг: 0 / 0
Помогите написать select
    #39571817
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with q as (select 1 as id, 'A' as c1, 'B' as c2 from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)

, w as (select id, listagg(c1,'-') WITHIN GROUP (order by c1) as c1, listagg(c2,'-') WITHIN GROUP (order by c2) as c2 from q
group by id)

select * from w t1 where exists (select * from w t2 where t1.id <> t2.id and t1.c1 = t2.c1 and t1.c2 = t2.c2)
...
Рейтинг: 0 / 0
Помогите написать select
    #39571828
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
listagg(c1,'-') WITHIN GROUP (order by c1) as c1, listagg(c2,'-') WITHIN GROUP (order by c2) as c2

под "полностью одинаковых" стоит понимать попарное совпадение а не независимая сортировка столбцов.
...
Рейтинг: 0 / 0
Помогите написать select
    #39571831
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dshedoo
Код: plsql
1.
listagg(c1,'-') WITHIN GROUP (order by c1) as c1, listagg(c2,'-') WITHIN GROUP (order by c2) as c2

под "полностью одинаковых" стоит понимать попарное совпадение а не независимая сортировка столбцов.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with q as (select 1 as id, 'A' as c1, 'B' as c2 from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
--select 4, 'A', '' from dual union all
--select 4, '', 'B' from dual union all
select 4, 'E', 'F' from dual union all
select 4, 'C', 'D' from dual)

, w as (select id, c1, c2, dense_rank() over(partition by id order by c1, c2) as c3 from q)
, e as (select id, listagg(c3||'-'||c1||'-'||c2,'/') WITHIN GROUP (order by c1) as c4 from w
group by id)

select * from e t1 where exists (select * from e t2 where t1.id <> t2.id and t1.c4 = t2.c4 )
...
Рейтинг: 0 / 0
Помогите написать select
    #39571836
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

>>order by c1 := order by c3
...
Рейтинг: 0 / 0
Помогите написать select
    #39571848
Загги
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
with src as (
select 1 "id", 'A' "c1", 'B' "c2" from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dualunion all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual ),
unk as ( select distinct "id" from src ) 
select *
from unk u1
inner join unk u2
on (u1."id" < u2."id")
where not exists ( select s1."c1", s1."c2" 
                   from src s1 
                   where s1."id" = u1."id" 
                   minus
                   select s2."c1", s2."c2" 
                   from src s2 
                   where s2."id" = u2."id" )
  and not exists ( select s2."c1", s2."c2" 
                   from src s2 
                   where s2."id" = u2."id"
                   minus
                   select s1."c1", s1."c2" 
                   from src s1 
                   where s1."id" = u1."id" ) 
...
Рейтинг: 0 / 0
Помогите написать select
    #39571854
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уложишься в длину varchar2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
column lst format a50

with s (id, c1, c2) as (
select 1, 'A', 'B' from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)
select id, listagg('[' || c1 || '-' || c2 || ']') within group (order by c1, c2) lst
from s
group by id;

        ID LST
---------- --------------------------------------------------
         1 [A-B][C-D][E-F]
         2 [G-H]
         3 [I-J][K-L]
         4 [A-B][C-D][E-F]

Ну а дальше группируй по lst, как тебе надо.
...
Рейтинг: 0 / 0
Помогите написать select
    #39571870
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшемся!
...
Рейтинг: 0 / 0
Помогите написать select
    #39571941
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71,

Можно и так попробовать:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with s (id, c1, c2) as (
select 1, 'A', 'B' from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)

select from_id, to_id
from (select s1.id from_id, s2.id to_id, sum(case when s1.c1 = s2.c1 and s1.c2 = s2.c2 then 1 end) sm, count(s1.id) over (partition by S2.id)  cnt
       from s s1, s s2
      where s1.id != s2.id
      group by s1.id, s2.id) t
where sm = cnt
...
Рейтинг: 0 / 0
Помогите написать select
    #39571956
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with s (id, c1, c2) as (
select 1, 'A', 'B' from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 1, 'x', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)
...



.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39571978
with a as
(select 1 id, 'A' c1, 'B' c2
from dual
union
select 1, 'C', 'D'
from dual
union
select 1, 'E', 'F'
from dual
union
select 2, 'G', 'H'
from dual
union
select 3, 'I', 'J'
from dual
union
select 3, 'K', 'L'
from dual
union
select 4, 'A', 'B'
from dual
union
select 4, 'C', 'D'
from dual
union
select 4, 'E', 'F'
from dual)
select distinct id
from (select count(id) over(partition by c1, c2) cnt, id from a)
where cnt > 1
...
Рейтинг: 0 / 0
Помогите написать select
    #39571983
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Так должно сработать, хотя на livesql.oracle.com maintenance и не могу проверить =( :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with s (id, c1, c2) as (
select 1, 'A', 'B' from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)
, s_org (select count(id) over (partition by id) cnt, s.* from s)

select s1.id from_id, s2.id to_id
       from s_org s1, s_org s2
      where s1.id != s2.id
      and s1.cnt = s2.cnt
      group by s1.id, s2.id, s1.cnt
having sum(case when s1.c1 = s2.c1 and s1.c2 = s2.c2 then 1 end) = s1.cnt
...
Рейтинг: 0 / 0
Помогите написать select
    #39571987
а что предпочтительнее, дистинкт или груп бай ? мой первый пример или этот второй ?

Код: 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 a as
 (select 1 id, 'A' c1, 'B' c2
    from dual
  union
  select 1, 'C', 'D'
    from dual
  union
  select 1, 'E', 'F'
    from dual
  union
  select 2, 'G', 'H'
    from dual
  union
  select 3, 'I', 'J'
    from dual
  union
  select 3, 'K', 'L'
    from dual
  union
  select 4, 'A', 'B'
    from dual
  union
  select 4, 'C', 'D'
    from dual
  union
  select 4, 'E', 'F'
    from dual)
select id
  from (select count(id) over(partition by c1, c2) cnt, id from a)
 where cnt > 1
 group by id
...
Рейтинг: 0 / 0
Помогите написать select
    #39571990
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс,

Код: 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.
with a as
(select 1 id, 'A' c1, 'B' c2
from dual
union
select 1, '*', '*'
from dual
union
select 1, 'C', 'D'
from dual
union
select 1, 'x', 'x'
from dual
union
select 1, 'E', 'F'
from dual
union
select 2, 'G', 'H'
from dual
union
select 2, 'I', 'J'
from dual
union
select 5, 'K', 'L'
from dual
union
select 5, 'x', 'y'
from dual
union
select 4, 'A', 'B'
from dual
union
select 4, 'C', 'D'
from dual
union
select 4, 'y', 'y'
from dual
union
select 4, '+', '+'
from dual
union
select 4, 'E', 'F'
from dual)
select distinct id
from (select count(id) over(partition by c1, c2) cnt, id from a)
where cnt > 1
/



....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39571992
stax,
не понял последнее сообщение

с выделенными строками

select 1, '*', '*'

и

select 4, '+', '+'
...
Рейтинг: 0 / 0
Помогите написать select
    #39572005
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс,

1 и 4 -разные наборы

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 45* where cnt > 1
SQL> /

        ID
----------
         1
         4



.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572008
StaxДобрыйМакс,

1 и 4 -разные наборы

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 45* where cnt > 1
SQL> /

        ID
----------
         1
         4



.....
stax

но при этом есть с такими id и одинаковые наборы из твоего примера

select 1, 'C', 'D'
select 4, 'C', 'D'

и с EF так же

автору нужно вывести id, если есть одинаковый набор, хотя бы один, но не сказано, что нужно исключить, есть есть хотя бы один неодинаковый с таким id

верно?
...
Рейтинг: 0 / 0
Помогите написать select
    #39572010
так а что лучше - dictinct или group by таки?
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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