попарный подсчет: SQL

0

Скажем, у меня есть таблица вроде этого:

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

Как только я получу это, я подумал, что сделаю счет и группу. Но это не дает мне то, что я хочу.

Любые предложения оцениваются.

Теги:

2 ответа

2
Лучший ответ

Используйте least() и greatest():

select least(a, b), greatest(a, b), count(*)
from t
group by least(a, b), greatest(a, b);
0

Вы можете сделать то же самое с 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 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню