Подсчитайте, сколько раз столбцы A и B содержат значения, которые также отображаются в столбце B & A - PullRequest
0 голосов
/ 16 апреля 2020

В моей базе данных у меня есть таблица с этими значениями:

column_a,column_b
1,2
3,4
2,1
4,3
3,1
5,6
1,4
1,3

Я могу знать, сколько раз существует совпадение между указанным c значением и любым другим значением. Примите значение «1»:

SELECT COUNT(*) FROM (SELECT * FROM `table` WHERE `column_a` = 1) as T1
JOIN (SELECT * FROM `table` WHERE `column_b` = 1) as T2
WHERE T1.`column_b` = T2.`column_a`

Результатом будет 2, потому что у нас есть 1,2, 2,1, 1,3 и 3,1 -> 1 совпадений с 2 ​​и 3.

Теперь я хочу узнать общее количество совпадений. Здесь будет 3 (потому что есть 3,4 и 4,3).

У кого-нибудь есть идеи?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Один из способов решить эту проблему - подсчитать все случаи, когда найдена совпадающая пара, но ограничить совпадения таким образом, чтобы во избежание дублирования была выбрана только пара, в которой column_a больше column_b:

SELECT COUNT(*)
FROM `table` t1
WHERE EXISTS (
  SELECT * 
  FROM `table` t2
  WHERE t2.column_b = t1.column_a AND t2.column_a = t1.column_b
    AND t2.column_a < t1.column_a
)

Вывод:

3

Демонстрация по SQLFiddle

0 голосов
/ 16 апреля 2020

Вы также можете использовать функцию least() & greatest():

SELECT COUNT(*)
FROM (SELECT COUNT(*)
      FROM `table` t1
      GROUP BY LEAST(column_a, column_B), GREATEST(column_a, column_B)
      HAVING COUNT(*) > 1
     ) t;

Вот демо .

0 голосов
/ 16 апреля 2020

Вот один из методов:

select count(distinct case when a = 1 then b else a end)
from t
where 1 in (a, b);

Здесь - это дБ <> скрипка.

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