SQLの自己結合を用いて数学の重複組み合わせを表現する


はじめに

SQLにおいて、自分はあまり聞き慣れなかった自己結合の今後役立つかもしれないテクニックを紹介していきます。

実行結果はこちらで確認できます。

自己結合を用いて重複組み合わせを作る

重複組み合わせの概念は以下を参照してください。

Schema (MySQL v5.7)

何かのメンバー一覧だと思ってください。

CREATE TABLE members (
  id INT NOT NULL PRIMARY KEY auto_increment,
  name TEXT
);

INSERT INTO members VALUES
    (1, 'tanaka'),
    (2, 'okada'),
    (3, 'hiranuma');

このメンバーの重複組み合わせを考えます。

今回のケースを計算すると

_{3}H_{2} = _{4}C_{2} \\
= \frac{4\times3}{2\times1} \\
= 6 \\

6通りの組み合わせが考えられます。

Query

SELECT 
   M1.name AS name_1,
   M2.name AS name_2
FROM members M1
INNER JOIN members M2 ON M2.name <= M1.name

文字コードの順にソートして、 自分(M1)と同等か、それよりも前に来るメンバーがペアになります。

Results

name_1 name_2
tanaka tanaka
tanaka okada
okada okada
tanaka hiranuma
okada hiranuma
hiranuma hiranuma

重複があることがわかります。

組み合わせなので、順序を入れ替えただけのペアは同じとみなしています。

参照

59p

アウトプット100本ノック実施中