1

以下のテーブルがあり、すべての一意のペアを選択したいと考えています。この問題を言葉で表現するのは、私が必要としているように聞こえないようにするのは難しいselect distinctので、目的の出力と考えられるすべての組み合わせを書き出します。

ここに画像の説明を入力

ペア 1: (1,4) および (2,5)

ペア 2: (1,4) および (3,6)

ペア 3: (2,5) および (3,6)

これは二項係数と同じです。

n n = 3 および k = 2 の r を選択します。

理想的には、出力は次のようになります。

ここに画像の説明を入力

正直なところ、これをどこから始めればよいかわかりません。最初の試みがないことをお許しください。

4

1 に答える 1

3

重複を排除する条件で自己結合を使用します。

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)
于 2015-11-06T15:21:59.733 に答える