powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql (SELECT)
25 сообщений из 38, страница 1 из 2
sql (SELECT)
    #39872624
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вывести все B у которых А равны 22, 37, 11.
одним запрсом
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872627
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chris0609,

select * from <table>
where a in(22,37,11)
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872633
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль,

не подходит
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872641
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609,

сформулируйте постановку задачи.
У вас слева 5 записей где А = 11, а справа 2, куда остальные потеряли?!

код Надфиля правильный, если исходить из постановки.
Код: plsql
1.
2.
select * from <table>
where a in(22,37,11)
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872644
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609не подходитand count distinct over=3
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872646
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,

нужно вывести все B у которых A равняется и 11 и 22 и 37
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872648
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chris0609,

и при этом сами B равны
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872657
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609Anton_Demin,

нужно вывести все B у которых A равняется и 11 и 22 и 37
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select a,b
  from t 
  match_recognize(
  partition by b
  order by a
  measures match_number() as mn
  all rows per match
  pattern(m1+ m2+ m3+)
  define m1 as a=11
       , m2 as a=22
       , m3 as a=37
  )
 where a in (22, 37, 11)
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872661
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609и при этом сами B равныНа приведенной тобой картинке B имеют два различных значения.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872675
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
4.
  match_recognize(
...
  )
 where a in (22, 37, 11)

where отработает по результату match_recognize, что дает странный результат.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872683
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609вывести все B у которых А равны 22, 37, 11.
одним запрсом

where a in (22,37,11)
group by b
having count(*) = 3
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872684
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-where отработает по результату match_recognize, что дает странный результат.
Угу, поправился:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select a,b 
  from (
    select xmlelement("r", xmlagg(xmlelement("z", xmlforest(a, b)))as "a") x
     from t
    where a in (22, 37, 11)
    group by b
    having 3 = count (distinct a)
    ), xmltable('/r/z' passing x columns a,b)
;

select a,b
  from (select * from t where a in (22, 37, 11))
  match_recognize(
  partition by b
  order by a
  measures match_number() as mn
  all rows per match
  pattern(m1+ m2+ m3+)
  define m1 as a=11
       , m2 as a=22
       , m3 as a=37
  )
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872726
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a,b
  from t
  where a in (22,37,11)
  model return updated rows
    partition by (b)
    dimension by (count(distinct a) over(partition by b) c, rownum r)
    measures (a as a)
    rules(a[3,any] = a[cv(),cv()])
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872729
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousУгу, поправился:


Можно и без in-line:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select  a,
        b
  from  t
  match_recognize(
                  partition by b
                  order by a
                  measures classifier() as cls
                  all rows per match
                  pattern(m0* m1+ m0* m2+ m0* m3+)
                  define m0 as a not in (11,22,37),
                         m1 as a=11,
                         m2 as a=22,
                         m3 as a=37
                 )
  where cls != 'M0'
  order by b,
           a
/



SY.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872732
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYМожно и без in-line:
Можно, но паттерн некрасивый
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872744
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или без WHERE и CLASSIFIER:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select  a,
        b
  from  t
  match_recognize(
                  partition by b
                  order by a
                  all rows per match
                  pattern({-m0-}* m1+ {-m0-}* m2+ {-m0-}* m3+)
                  define m0 as a not in (11,22,37),
                         m1 as a=11,
                         m2 as a=22,
                         m3 as a=37
                 )
  order by b,
           a
/



SY.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872754
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
pattern({-m0-}* m1+ {-m0-}* m2+ {-m0-}* m3+)



Вот так красиво.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872762
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSY
Код: plsql
1.
pattern({-m0-}* m1+ {-m0-}* m2+ {-m0-}* m3+)



Вот так красиво.
... но можно упростить до pattern(m1+ {-m0-}* m2+ {-m0-}* m3+)
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872771
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаем развлекаться
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a,b
from (
select t.*
     , ','||listagg(a,',') within group(order by a) over(partition by b)||',' f
  from t
 where a in (22, 37, 11)
) x
where 3 = sign(instr(f,',22,'))+sign(instr(f,',11,'))+sign(instr(f,',37,')) 
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872798
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
спасибо )) получилось
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872815
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with p as (select *
          from t
         pivot ( count(a) for a in (22,37,11))
         where "22">0 and "37">0 and "11">0
)
, u as ( select * from p
        unpivot ( mx_count for a in ("22", "37", "11"))
)
select a,b 
  from u
     , lateral(select null from dual connect by level <=mx_count)
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872823
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with p as (select *
          from t
         pivot ( count(a) for a in (22,37,11))
         where "22">0 and "37">0 and "11">0
)
select a,b
  from p
     , lateral ( select 22 a from dual connect by level <= p."22"
       union all select 11  from dual connect by level <= p."11"
       union all select 37  from dual connect by level <= p."37"
     )
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872837
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Приключения Электроника- Сережа, а что это у тебя за значок?
- Какой?
- Ну, вот этот. У тебя все решение на нем построено!
- А...этот...как его... Интригал!
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872838
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragrafИнтригал!

Ага, оно самое )
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872841
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with "Интригал"(b3) as(
select b  
  from t
 where a in (11,22,37)
 group by b
having count(distinct a) = 3
)
select a,b from "Интригал", t where b3=b and a in (11,22,37)
;
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql (SELECT)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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