2015-03-10 4 views
-1

у меня есть БД, как этотSQL Фильтрация данных групп

id name group 

с данными, как это

1 john A 
2 john B 
3 charles B 
4 peter B 
5 rose B 
6 charles A 
7 justin C 

Как вы можете видеть, максимальными возможностями в том, что один ID это связано с одной группой, или более чем одной группой

я нужен запрос для фильтрации

а) находятся в группе а и в б) в группе А, но не B с) только в группе А

+2

А что вы пробовали? – Jens

ответ

1
a. select distinct name from tablename where group = 'A' or group = 'B'; 
    b. select distinct name from tablename where group = 'A' and group <> 'B'; 
    c. select distinct name from tablename where group = 'A' and 
     group not in (select distinct(t1.group) from tablename t1 
         where t1.group <> 'A'); 
+0

Это выглядит прекрасно, единственная проблема - когда я не могу подсчитывать группы, на (c) не должен быть в состоянии сделать это, не указывая вручную их – Zuker

+1

@ Zuker ok, я сделал его более динамичным. – Donal

0

Я хотел подхода к решению этих проблем с использованием group by и пункт having. Для вашего первого вопроса:

select name 
from table 
group by name 
having sum(group = 'A') > 1 and sum(group = 'B') > 0; 

Другие два:

having sum(group = 'A') > 1 and sum(group = 'B') = 0; 
having sum(group = 'A') > 1 and sum(group <> 'A') = 0; 
Смежные вопросы