Запрос по запросу в Oracle SQL - PullRequest
0 голосов
/ 03 октября 2019

У меня есть данные, как показано ниже:

Category | Type | Rank 
Milk        1      1 
Milk        2      2
Milk        3      3
Chocolate   1      2
Candy       1      1

Любая идея для достижения результата ниже с помощью плоского SQL-запроса:

Category 
Milk         

Query must satisfy the below conditions:
 1. Only Type 1 and Rank 1 will be selected. 
 2. Only Category that has Type 1 and Type 2 will be selected. 

В приведенных выше примерах данных, только молоко, котороеудовлетворять условиям, указанным выше.

Мой запрос ниже. Но это неверно, потому что вернет и Кенди.

SELECT DISTINCT Category 
FROM table 
WHERE Type = 1 AND rank = 1

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Вы можете попробовать ниже -

ДЕМО

select distinct category 
from table a
WHERE Type = 1 AND rank = 1 
and exists 
 (select 1 from table b where a.category=b.category and type in (1,2) 
     group by category having count(distinct type)=2)

ВЫХОД:

category
Milk
1 голос
/ 03 октября 2019

Вы можете использовать агрегацию:

select category
from t
group by category
having sum(case when type = 1 and rank = 1 then 1 else 0 end) > 0 and
       sum(case when type = 2 then 1 else 0 end) > 0;

Если нет дубликатов, это можно упростить до:

select category
from t
where (type = 1 and rank = 1) or type = 2
group by category
having count(distinct type) = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...