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

SQLウィンドウ関数を使用して集計のパーセンテージを計算する方法

    あなたはこれを探していると思います:

    SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
    FROM   test
    GROUP  BY d1, d2;
    

    要求された結果を生成します。

    ウィンドウ関数はに適用されます 集計関数。外側のsum() sum(sum(v)) OVER ...で はウィンドウ関数です(添付のOVER ... 句)内部のsum() は集計関数です。

    実質的に同じ:

    WITH x AS (
       SELECT d1, d2, sum(v) AS sv
       FROM   test
       GROUP  BY d1, d2
       )
    SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
    FROM   x;
    

    または(CTEなし):

    SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
    FROM  (
       SELECT d1, d2, sum(v) AS sv
       FROM   test
       GROUP  BY d1, d2
       ) x;
    

    または@Muのバリアント。

    余談ですが、Greenplumはバージョン4.2で相関サブクエリを導入しました。 リリースノートを参照してください。



    1. SQL Server はタイムアウトした要求に対して何をしますか?

    2. データベース設計では、1つのテーブルを作成して、いくつかの種類の再帰ポインターをポイントします。

    3. IntelliJのデータソース、JNDIAPIの操作

    4. Oracleでトリガーするパラメータを送信する方法