sql >> データベース >  >> RDS >> PostgreSQL

postgresqlで任意のサイズの配列のすべての組み合わせ(サブセット)を見つける方法

    次の関数は、要求されたサイズのすべての組み合わせを、行ごとに1つの組み合わせを持つ行のセットとして生成します。

    create or replace function get_combinations(source anyarray, size int) returns setof anyarray as $$
     with recursive combinations(combination, indices) as (
       select source[i:i], array[i] from generate_subscripts(source, 1) i
       union all
       select c.combination || source[j], c.indices || j
       from   combinations c, generate_subscripts(source, 1) j
       where  j > all(c.indices) and
              array_length(c.combination, 1) < size
     )
     select combination from combinations
     where  array_length(combination, 1) = size;
    $$ language sql;
    

    この関数は、配列型では多形です。




    1. 階層的な役割ベースのアクセス制御システムを設計する方法

    2. INSERT…SELECTおよび高速ロードコンテキストを使用した最小限のロギング

    3. 階層データ全体でのMySQLクエリの最適化

    4. (IPまたはドメイン名)でMySQLサーバーに接続できません