特定の値のセットが持つ行のパーセンテージを取得しようとしています。例によって最もよく説明されます。これは、ratio-to-report関数とover()を使用して非常に簡単に各列で実行できますが、複数のグループ化に問題があります。
テーブルに2つの列があると仮定します。
column a column b
1000 some data
1100 some data
2000 some data
1400 some data
1500 some data
次のクエリで、このドメインセットを取得できます。各ドメインセットは、合計行の20%です。
select columna, count(*), trunc(ratio_to_report(count(columna)) over() * 100, 2) as perc
from table
group by columna
order by perc desc;
ただし、必要なのは、たとえば、1000、1400、または2000を含む行のパーセンテージと数を決定することです。それを見ると、その60%がわかりますが、それを返すにはクエリが必要です。クエリは数百万行に対して実行されるため、これは効率的である必要があります。前に言ったように、私はこれを単一の値とそのパーセンテージに取り組んでいますが、複数が私を投げています。
IN句をどこかに配置できるようにする必要があるようですが、値は毎回これらの特定の値になるわけではありません。それが理にかなっている場合は、別のテーブルからその「IN」部分の値を取得する必要があります。ある種の複数のグループ化が必要だと思います。