SQL — выборка строк, где количество = 0 (группировка по)

#sql #oracle #group-by

#sql #Oracle #группировка по

Вопрос:

из этого результирующего набора я хочу получить только req_id's те, которые имеют только 0 для количества. Обратите внимание, что может быть несколько строк с одинаковыми req_id

 req_id | quantity

kcm01   0
kcm02   1
kcm02   0
kcm02   0
kcm02   4
kcm03   4
kcm03   5
kcm03   0
kcm05   0
kcm05   0
  

Мне нужен только результат, подобный приведенному ниже,

 req_id

kcm01
kcm05
  

Вот что я пробовал, но это не дало мне желаемых результатов. Спасибо за помощь.

 select req_id from t
group by req_id, quantity
having max(quantity) = 0
  

Комментарии:

1. Не группируйте по количеству — это создаст группу почти для каждой строки в ваших результатах

Ответ №1:

Вот способ добраться до решения.

 select req_id 
  from t
group by req_id
having max(quantity) = 0
   and count(distinct quantity)=1
  

Ответ №2:

 select distinct req_id 
from table t1
where quantity = 0
and not exists (select 1 from table t2 where t2.req_id = t1.req_id and t2.quantity <> 0)
  

Ответ №3:

Если у вас есть отдельная req таблица, то наиболее эффективным методом, вероятно, является:

 select r.*
from reqs r
where not exists (select 1
                  from t
                  where t.req_id = r.req_id and t.quantity <> 0
                 );