Скажем, у меня есть таблица вроде этого:
A | B
---
1 | 2
2 | 1
3 | 1
1 | 3
1 | 3
5 | 6
Я хочу написать SQL-запрос для подсчета таких пар, что (a, b) = (b, a). В приведенном выше примере, поскольку у нас есть две пары (1,3) и одна пара (3,1), я хочу, чтобы соответствующее число было равно 3. Аналогично, подсчет для (1,2) и (2,1) 2.
Конечный результат должен выглядеть примерно так:
A | B | count
---
1 | 2 | 2
1 | 3 | 3
5 | 6 | 1
Я пробовал следующее:
SELECT * from table join table where table.A = table.B and table.B = table.A
Как только я получу это, я подумал, что сделаю счет и группу. Но это не дает мне то, что я хочу.
Любые предложения оцениваются.
Используйте least()
и greatest()
:
select least(a, b), greatest(a, b), count(*)
from t
group by least(a, b), greatest(a, b);
Вы можете сделать то же самое с CASE
SELECT
CASE WHEN a > b THEN b ELSE a end AS a,
CASE WHEN a < b THEN b ELSE a end AS b ,
COUNT(*) CountValue
FROM Table1
GROUP BY (CASE WHEN a > b THEN b ELSE a end),
CASE WHEN a < b THEN b ELSE a end