2015-08-13 2 views
0

У меня есть таблица, как этотMySQL фильтр, граф, организовать

user | app 
name1 app1 
name1 not an app 
name1 app1 
name1 app2 
name2 not an app 
name3 app2 
name3 app3 
name4 app3 
name4 app3 

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

user | app 
name1 app1 
name1 app2 
name3 app2 
name3 app3 

ответ

1

с использованием автообъединения должна работать на основе эквивалента пользователя и неэквивалентное приложение за исключением «не приложение» записея

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

SELECT A.user, A.App 
FROM table A 
INNER JOIN table B 
    on A.User = B.user 
and A.App <> B.App 
and A.App <> 'not an app' 
and B.App <> 'not an app' 
Group by A.user, A.App 

Появляется работать ..

enter image description here

+0

Я не пробовал это, но мне нужно показать все вхождения до тех пор, пока приложение является приложением, и еще не показано – maco1717

+0

Итак, если App 4, App4, App1 существует для пользователя 1, вы бы хотели, чтобы App4 дважды отображался и app1 перечисленные один раз для одного и того же пользователя? – xQbert

+0

Нет, только один раз, я обновил вопрос. – maco1717

1

Фильтрация «не приложение» записи, это поможет вам пользователей, которые имеют более одного приложения:

select user 
from MyTable 
where app <> 'not an app' 
group by user 
having count(distinct app) > 1 

Вы можете использовать это, чтобы получить все данные для тех пользователей, как это:

select * 
from MyTable 
where user in (
    select user 
    from MyTable 
    where app <> 'not an app' 
    group by user 
    having count(distinct app) > 1 
) 
+0

К сожалению, как я это реализовать, я копирую первый запрос к новой таблицы и запроса, новая таблица с данными второго запроса? – maco1717

+0

Вам нужен только второй запрос. – xQbert

Смежные вопросы