powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql (SELECT)
38 сообщений из 38, показаны все 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
sql (SELECT)
    #39872844
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with "Интригал"(a,b,c) as(
select a,b,count(distinct a) over(partition by b) c
  from t
 where a in (11,22,37)
)
select a,b from "Интригал" where c = 3
/



SY.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872847
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872855
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with k(b, a, c, cunq) as(
select b, a, count(a), count(distinct a)
  from t
 where a in (11,22,37)
 group by grouping sets(b, (b,a))
) 
, "Интригал"(a, b, c) as (
select a, b, 1e38
  from k where a is null and cunq = 3
union all 
select k.a, k.b, case i.c when 1e38 then k.c else i.c-1 end
  from "Интригал" i, k
 where i.b = k.b 
   and nvl(i.a, k.a) = k.a 
   and i.c > 1
)
select a,b 
  from "Интригал" 
 where a is not null
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872863
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19C:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with "Intrigal"(a,b,c) as(
select a,b,listagg(distinct a,',') within group(order by a) over(partition by b) c
  from t
 where a in (11,22,37)
)
select a,b from "Intrigal" where c = '11,22,37'
  order by b,
           a
/



SY.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872872
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with "Интригал"(b, ta) as(
select b, cast(collect(a) as SYS.ku$_ObjNumSet) t
  from t
 group by b
having 3 = cardinality(cast(collect(a) as SYS.ku$_ObjNumSet) multiset intersect distinct SYS.ku$_ObjNumSet(11,22,37))
)
select column_value a, b 
  from "Интригал", table(ta)
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872884
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут ошибко
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with "Интригал"(b, ta) as(
select b, cast(collect(a) as SYS.ku$_ObjNumSet) t
  from t
 where a in (11,22,37)
 group by b
having 3 = cardinality(cast(collect(a) as SYS.ku$_ObjNumSet) multiset intersect distinct SYS.ku$_ObjNumSet(11,22,37))
)
select column_value a, b 
  from "Интригал", table(ta)
;



Попытка номер N:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with "Интригал"(b, ta) as(
select b, cast(collect(a) as SYS.ku$_ObjNumSet)
  from t
 where a in (11,22,37)
 group by b
having SYS.ku$_ObjNumSet(11,22,37) multiset except cast(collect(a) as SYS.ku$_ObjNumSet)  = SYS.ku$_ObjNumSet()
)
select column_value a, b
  from "Интригал", table(ta)
;
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872887
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...что-то беден я стал на фантазию - pivot/unpivot, recursive subquery factoring, pattern matching, model, self-join, группировки, multiset, xmltable вроде были - что еще можно прикрутить или как перевернуть с ног на голову уже показанное?
...
Рейтинг: 0 / 0
sql (SELECT)
    #39872904
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous...что-то беден я стал на фантазию - pivot/unpivot, recursive subquery factoring, pattern matching, model, self-join, группировки, multiset, xmltable вроде были - что еще можно прикрутить или как перевернуть с ног на голову уже показанное?connect by + inline view
...
Рейтинг: 0 / 0
sql (SELECT)
    #39887396
Antonnew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 2 таблицы


agent_id date ID
ivanov 01.01.2000 0:00 1
Petrov 02.01.2000 10:00 1
Sidorov 03.01.2000 10:00 2
ivanov 01.01.2000 0:00 1
Petrov 02.01.2000 10:00 3
Sidorov 03.01.2000 10:00 1
ivanov 01.01.2000 0:00 2
Petrov 02.01.2000 10:00 3
Sidorov 03.01.2000 10:00 1
Petrov 01.01.2000 0:00 2
Sidorov 02.01.2000 10:00 3


ID_t name
1 snikers
2 mars
3 bounti

как получить такой результат?

agent_id count1(01/01/2000) count2
ivanov 3 2
Petrov
Sidorov

Иванов сделал 3 продажи за 01,01б2000, из них 2 было по сникерс
ну и по остальным agent что бы также считалось
...
Рейтинг: 0 / 0
sql (SELECT)
    #39887400
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonnew
есть 2 таблицы
Ты опять стесняешься создать свою тему?

К сведению модераторов: offtopic - это тоже вполне наказуемое правилами деяние.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39887406
Antonnew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

вовсе нет. просто не хочется плодить темы-одновневки. вопросы день ото дня разные.

в этой теме разбирались задачи с selectom, у меня задача из этой же оперы
...
Рейтинг: 0 / 0
sql (SELECT)
    #39887421
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonnew
в этой теме разбирались задачи с selectom, у меня задача из этой же оперы
Ты слишком скудоумен, чтобы пытаться обобщённо классифицировать вопросы.
...
Рейтинг: 0 / 0
sql (SELECT)
    #39887422
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonnew
блин, да. на каждом форуме сидят типа профессионалы, которые только и могут что кидать ссылки на ФАК.
у которых тысячи обсолютно бесполезных комментариев....


для особо одаренный - твой комментарий абсолютно излишний. решение найдена было, писал выше


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


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