Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 sql запрос, как лучше решить  [new]
rekrabbe
Member

Откуда:
Сообщений: 30
Нужно по признаку определить все элементы в группе.
with t as
(select 1 as grp, 11 as grp_detail, 't' as detail_mark from dual
 union all
 select 1 as grp, 12 as grp_detail, 't' as detail_mark from dual
 union all
 select 1 as grp, 13 as grp_detail, 't' as detail_mark from dual
 union all
 select 2 as grp, 21 as grp_detail, 'f' as detail_mark from dual
 union all
 select 2 as grp, 22 as grp_detail, 't' as detail_mark from dual
 union all
 select 2 as grp, 23 as grp_detail, 'f' as detail_mark from dual)
select *
from (
select grp
  , count(grp_detail) as qty
  , count(case when detail_mark = 't' then grp_detail else null end) as qty_is_mark
from t
group by grp)
where qty_is_mark = qty


Т.е. найти тот grp в котором признак detail_mark равен 't' для всех grp_detail, т.е. grp = 2, не должен попадать в результат, т.к. в нем есть grp_detail с признаком detail_mark = 'f'.
Я написал свое решение, с подсчетом и сравнением итогового кол-ва с кол-вом по признаку. Подскажите как решить лучше, без счета?
25 ноя 16, 11:46    [19933327]     Ответить | Цитировать Сообщить модератору
 Re: sql запрос, как лучше решить  [new]
rekrabbe
Member

Откуда:
Сообщений: 30
Сделал еще так:
where t.detail_mark = 't'
and not exists (select null from t t1 where t1.grp = t.grp and t1.detail_mark = 'f')

Но хотелось бы увидеть другие решения)
25 ноя 16, 12:04    [19933447]     Ответить | Цитировать Сообщить модератору
 Re: sql запрос, как лучше решить  [new]
Elic
Member

Откуда:
Сообщений: 29991
rekrabbe
найти тот grp в котором признак detail_mark равен 't' для всех grp_detail
select grp from t group by grp having count(*) = count(caseend)
25 ноя 16, 12:10    [19933481]     Ответить | Цитировать Сообщить модератору
 Re: sql запрос, как лучше решить  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Твое первое решение вполне адекватно. Остановись на нем.
25 ноя 16, 12:10    [19933488]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить