Комбинаторика в postgreSQL - выбор пар

У меня есть таблица ниже, и я хотел бы выбрать все уникальные пары. Трудно сформулировать эту проблему, не говоря, что мне просто нужно select distinct поэтому я выпишу желаемый результат и каждую возможную комбинацию.

Пара1: (1,4) и (2,5)

Пара2: (1,4) и (3,6)

Пара3: (2,5) и (3,6)

Это то же самое, что и биномиальный коэффициент:

n Выберите r, где n = 3 и k = 2.

В идеале вывод будет выглядеть примерно так:

Честно говоря, я не знаю, с чего начать, поэтому, пожалуйста, извините, что нет первой попытки.

1 ответ

Решение

Используйте самостоятельное соединение с условиями, устраняющими дубликаты:

create table a_table (cola int, colb int);
insert into a_table values
(1, 4), (2, 5), (3, 6);

select * 
from a_table a
join a_table b 
on a.cola < b.cola and a.colb <> b.colb;

 cola | colb | cola | colb 
------+------+------+------
    1 |    4 |    2 |    5
    1 |    4 |    3 |    6
    2 |    5 |    3 |    6
(3 rows)

Приведенный выше запрос работает хорошо, если столбец cola уникален Если значения cola можно повторить, следует добавить дополнительное условие:

insert into a_table values (1, 8);

select * 
from a_table a
join a_table b 
on a.cola < b.cola and a.colb <> b.colb
or a.cola = b.cola and a.colb < b.colb
order by 1, 2;

 cola | colb | cola | colb 
------+------+------+------
    1 |    4 |    2 |    5
    1 |    4 |    3 |    6
    1 |    4 |    1 |    8
    1 |    8 |    2 |    5
    1 |    8 |    3 |    6
    2 |    5 |    3 |    6
(6 rows)
Другие вопросы по тегам