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

SQLServer-相関のある条件付き集計

    より簡単な解決策があります:

    SELECT c.Customer, c."User", c."Revenue",
           1.0 * Revenue/ NULLIF(c2.sum_total, 0) AS percentage,
           1.0 * c2.sum_running / NULLIF(c2.sum_total, 0) AS running_percentage
    FROM t c CROSS APPLY
         (SELECT SUM(c2.Revenue) AS sum_total,
                 SUM(CASE WHEN c2.Revenue >= x.Revenue THEN c2.Revenue ELSE 0 END) 
                     as sum_running
          FROM t c2 CROSS JOIN
               (SELECT c.REVENUE) x
          WHERE c."User" = c2."User"
         ) c2
    ORDER BY "User", Revenue DESC;
    

    この制限がSQL'92標準にある理由、またはそのかどうかはわかりません。 20年ほど前にかなりよく覚えていましたが、その特定の制限を思い出せません。

    注意する必要があります:

    • SQL 92標準の時点では、横方向の結合は実際には注目されていませんでした。 Sybaseには確かにそのような概念はありませんでした。
    • 他のデータベースは 外部参照に問題があります。特に、スコープを1レベルの深さに制限することがよくあります。
    • SQL標準自体は、実際のデータベースユーザーの要件ではなく、非常に政治的(つまり、ベンダー主導)になる傾向があります。まあ、時間の経過とともに、それは正しい方向に動きます。


    1. MySqlのストアドプロシージャにコンマ区切りの値を渡す方法は?

    2. djangoの動的データベーステーブル

    3. dbの取得:SQLSTATE [HY000][2002]MacでMAMPを使用した場合の接続拒否エラー

    4. PHP codeigniter からストアド プロシージャを呼び出す