2014-10-11 5 views
2
Sample Table 
User1 | User2 
123, 555 
123, 1 
123, 2 
456, 2 
555, 456 
12, 123 
12, 456 

Ввод: Я вхожу в список (123,456), чтобы посмотреть строки, содержащие любое из этих значений. Затем я хочу, чтобы MySQL проверял противоположный/другой столбец в этой строке и группировал вывод по этому значению.Группа по одной колонке

Выход:

User | Count(*) 
555, 2 
2, 2 
1, 1 

555 счетчик равен 2, потому что строка 123, 555 и строка 555, 456 оба содержат один из входов: 123 и 456.

Я попытался глядя на CASE ключевое слово, поскольку очевидное препятствие здесь захватывает противоположный/оставшийся столбец и использует это как одно из возвращаемых значений.

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

SELECT user, count(*) from friendships 
WHERE User1 in (123,456) as user or User2 in (123,456) as user 
+2

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

ответ

3

хитрая часть с этим вашим критерием является IN() ищет в столбце пользователями1, а затем пытается найти дубликаты в столбце user2 ... так что вам нужно вступить с UNION

SELECT user2, COUNT(*) 
FROM 
( SELECT user1, user2 
    FROM friends f 
    WHERE f.user1 IN(123, 456) 

    UNION ALL 

    SELECT f.user1, f.user2 
    FROM friends f 
    JOIN friends f1 ON f1.user1 = f.user2 
    WHERE f.user1 IN(123, 456) 
)t 
GROUP BY user2; 

WORKING FIDDLE

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