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

Postgresratio_to_report関数

    特定の関数をインポートする必要はまったくありません。ウィンドウ化されたSUMを使用したPostgresqlと同等 :

    SELECT ID, val, 1.0 * val / NULLIF(SUM(val) OVER(),0) AS ratio_to_report
    FROM tab
    

    SqlFiddleDemo

    出力:

    ╔═════╦══════╦═════════════════════╗
    ║ id  ║ val  ║   ratio_to_report   ║
    ╠═════╬══════╬═════════════════════╣
    ║  1  ║  10  ║ 0.16666666666666666 ║
    ║  2  ║  10  ║ 0.16666666666666666 ║
    ║  3  ║  20  ║ 0.3333333333333333  ║
    ║  4  ║  20  ║ 0.3333333333333333  ║
    ╚═════╩══════╩═════════════════════╝
    

    PARTITION BYをシミュレートするには 使用できるもの:

    SELECT ID, val, category,
        1.0 * val / NULLIF(SUM(val) OVER(PARTITION BY category),0) AS ratio_to_report
    FROM tab
    

    SqlFiddleDemo2

    出力:

    ╔═════╦══════╦═══════════╦═════════════════╗
    ║ id  ║ val  ║ category  ║ ratio_to_report ║
    ╠═════╬══════╬═══════════╬═════════════════╣
    ║  1  ║  10  ║ a         ║ 0.25            ║
    ║  2  ║  10  ║ a         ║ 0.25            ║
    ║  3  ║  20  ║ a         ║ 0.5             ║
    ║  4  ║  20  ║ b         ║ 1               ║
    ╚═════╩══════╩═══════════╩═════════════════╝
    



    1. NodeJS/mySQL-ER_ACCESS_DENIED_ERRORユーザー'root'@'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    2. PostgreSQL:複数列の一意性制約に基づく自動インクリメント

    3. PostgreSQL:左外部結合構文

    4. 2つの異なるwhere句を持つ2つのデータセットを返す必要があります