Доброе утро, у меня есть два столбца в студии sql, и мне нужно посчитать отношения между элементами одного столбца и другого. Проблема в том, что считается только в «одном направлении», и я хочу знать оба. Может быть, будет проще, если я покажу вам на простом примере. Я использую SQL-сервер.
Это исходная таблица:
Col1 Col2
3 1
3 2
3 2
4 4
4 5
4 6
3 2
2 3
2 3
И если я сделаю следующее (на основе count(concat)), это даст следующие результаты.
select Col1, Col2, count(concat(Col1, Col2)) as weight
FROM test1
group by Col1, Col2
Col1 Col2 weight
3 1 1
3 2 3
2 3 2
4 4 1
4 5 1
4 6 1
Но я хотел бы также учитывать отношения между двумя элементами независимо от того, находится ли он в том или ином столбце. Итак, количество отношений между 3-2 (или 2-3) будет равно 5. Возможно ли это сделать?
3 2 5
Любое предложение будет очень приветствоваться! Заранее спасибо!


Большинство баз данных поддерживают least() и greatest(). Это позволяет вам делать:
select least(col1, col2) as col1, greatest(col1, col2) as col2,
count(*) as cnt
from t
group by least(col1, col2), greatest(col1, col2);
Если ваша база данных не поддерживает эти удобные функции, вы можете реализовать подобную логику, используя case выражения.