2017-11-15 19 views
1

テーブルに売上があり、売上高と合計の割合を計算しようとしています。PostgreSQL合計サブクエリの合計と割合

WITH t1 AS (
    SELECT 
    product_id, 
    sum(financial_charge_cents) as cents 
    FROM "account_charges" 
    WHERE account_id = 5 
    AND status = 'Charged' 
    GROUP BY product_id 
    ORDER BY cents DESC 
) 
SELECT 
    product_id, 
    cast(cents as money)/100.0 AS dollars, 
    cents/(sum(cents) OVER (PARTITION BY product_id)) as percent 
FROM t1 
ORDER BY dollars DESC 

しかし、これはすべてのパーセントを1に戻していますが、その理由はわかりません。

これは型の問題かどうかわかりません。

答えて

1

OVER (PARTITION BY produuct_id)の合計は、centsと同じになります。パーティションは必要ありません。

SELECT 
    product_id, 
    cast(cents as money)/100.0 AS dollars, 
    cents* 1.0/(sum(cents) OVER()) as percent 
FROM t1 
ORDER BY dollars DESC 

数値結果を得るには、*1.0を追加しました。 centsが数値(整数ではない)の場合はスキップしてください。

+0

本当に機能しますか? –