2015-10-14 4 views
1

У меня есть сложная версия этой проблемы (How to select columns with same set of values in mysql?).Как выбрать столбцы с подмножеством другого столбца в mysql?

В отношении R (A, B, C) проблема заключается в том, чтобы выяснить, «A с 4 или более распространенными B». FYI: «AB» - это ключ кандидата.

Все, что я был в состоянии сделать это

Запрос:

select * from 
(select A, group_concat (B separator ', ') all_b's from R group by A having 
(count(B))>3) p1 
join 
(select A, group_concat (B separator ', ') all_b's from R group by A having 
(count(B))>3) p2 
on p1.all_b's = p2.all_b's and p1.A <> p2.A; 

Выход:

Null Set 

Но, ответ должен быть чем-то еще. Любая идея, как с этим бороться?

Образец данных:

A B C 
a1 b1 asdas 
a1 b2 sdvsd  
a1 b3 sdfs 
a1 b4 evevr 
a2 b1 jdjd 
a2 b2 dkjlfnv 
a2 b3 sdfs 
a2 b4 evevr 
a2 b5 adfgaf 
a3 b1 sdfsdf 

Ожидаемый результат

A A count 
a1 a2 4 
+1

Какой выход можно ожидать от данных выборки Вы предоставляете? Пожалуйста, обновите свой вопрос с помощью этой информации. – Progman

+0

Вы хотите, чтобы все результаты выполнялись в строке sigle (1 реестр)? –

+0

Нет. Мне хотелось бы увидеть пары A в каждой строке, у которых есть 4 или более общих B. –

ответ

2

Это должно быть что-то вроде этого:

SELECT 
    first.A AS first_A, 
    second.A AS second_A, 
    COUNT(*) AS countSameBs 
FROM 
    R first 
JOIN 
    R second ON 
    first.B = second.B AND 
    first.A != second.A 
GROUP BY 
    first_A, second_A 
HAVING 
    countSameBs >= 4 AND 
    first_A < second_A 
+1

@VarunKumarChepuri Попробуйте добавить 'AND first_A Progman

+0

Это в значительной степени верно, но на выходе я получаю за это Выходные: A B C a1 a2 4 a2 a1 4 –

+0

Спасибо большое! Вы добавили меньше условия в предложение, потому что список A, где в порядке возрастания, я полагаю. Что делать, если список не отсортирован? Есть ли другой способ решить эту проблему? –

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