web-dev-qa-db-ja.com

2つの列の明確な組み合わせ

2つの列が相互に多対多の関係を持っているので、現在、テーブル内で異なる組み合わせを見つけようとしています。

データは、特にクライアントに対して実行されているバックアップポリシーに関するものであり、以下のように要約できます。

enter image description here

上記の表について生成したい答えは、7です。これは、その数の異なる組み合わせがあるためです。

これがどのように行われるかについて誰かが考えを持っていますか?ネストされたカウントと個別の値を試してみました(1つの列にフィルターをかけることができましたが、両方にはできませんでした)。

5
TheGrew

次のコマンドを実行して、個別の要素を数えることができます。

select count(distinct policy_id, client_id) from policy_client;

別のオプションは、グループ化してそれを数えることです。

select count(*) from (select policy_id, client_id from policy_client group by 1,2) a;

両方のバージョンを実行して、どちらがデータセットでより良いパフォーマンスを発揮するかを確認します。

非常に簡単な方法ですが、(policy_idとclient_id)のキーがある場合は完全に正確ではありませんが、そのインデックスのカーディナリティを確認することもできますが、これは正確な数値ではありません。

5
Károly Nagy

私は最も簡単だと思います:

SELECT COUNT(DISTINCT policy, client) 
         AS distinct_combinations
FROM table_name ;
3
ypercubeᵀᴹ