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

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

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

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

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

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

и при этом сами B равны
...
Рейтинг: 0 / 0
07.10.2019, 15:15
    #39872657
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
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
07.10.2019, 15:16
    #39872661
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
chris0609и при этом сами B равныНа приведенной тобой картинке B имеют два различных значения.
...
Рейтинг: 0 / 0
07.10.2019, 15:24
    #39872675
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
andrey_anonymous
Код: plsql
1.
2.
3.
4.
  match_recognize(
...
  )
 where a in (22, 37, 11)

where отработает по результату match_recognize, что дает странный результат.
...
Рейтинг: 0 / 0
07.10.2019, 15:35
    #39872683
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
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
07.10.2019, 15:36
    #39872684
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
-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
07.10.2019, 16:26
    #39872726
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Код: 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
07.10.2019, 16:29
    #39872729
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
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
07.10.2019, 16:31
    #39872732
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
SYМожно и без in-line:
Можно, но паттерн некрасивый
...
Рейтинг: 0 / 0
07.10.2019, 16:44
    #39872744
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Или без 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
07.10.2019, 16:53
    #39872754
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
SY
Код: plsql
1.
pattern({-m0-}* m1+ {-m0-}* m2+ {-m0-}* m3+)



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



Вот так красиво.
... но можно упростить до pattern(m1+ {-m0-}* m2+ {-m0-}* m3+)
...
Рейтинг: 0 / 0
07.10.2019, 17:06
    #39872771
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Продолжаем развлекаться
Код: 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
07.10.2019, 17:21
    #39872798
chris0609
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
andrey_anonymous,
спасибо )) получилось
...
Рейтинг: 0 / 0
07.10.2019, 17:31
    #39872815
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Код: 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
07.10.2019, 17:37
    #39872823
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Код: 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
07.10.2019, 17:58
    #39872837
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
andrey_anonymous,

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

Ага, оно самое )
...
Рейтинг: 0 / 0
07.10.2019, 18:03
    #39872841
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql (SELECT)
Код: 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql (SELECT) / 25 сообщений из 38, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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