2016-02-11 112 views
3

我想計算組中的值按百分比。我的表數據按Postgres中的值計算組的百分比值

salesId salesAmount productName salesTyp 
------- ----------- ----------- -------- 
     1   50.00 mouse   online 
     2  100.00 mouse   shop 
     3  150.00 mouse   shop 
     4   50.00 mouse   shop 
     5  100.00 keyboard  shop 
     6   50.00 keyboard  online 

外出時把我想告訴喜歡

productName totalamount percentageofonline 
----------- ----------- ------------------ 
     mouse   350    25.00 
    keyboard   150    50.00 

這裏4鼠標被出售(3店,1個在網上),這樣的比例是25.00
和2鍵盤是已售出(1店鋪在線,1店鋪在線)所以百分比是50.00

請幫我解決。我爲表結構創建了一個SQLFIDDLE

回答

2

在一個快速的方法:

WITH total AS (
    SELECT productName, sum(salesAmount) AS totalamount 
    FROM testSales 
    GROUP BY productName 
) 
SELECT total.totalamount, total.productName, (
     SELECT count(*) 
     FROM testSales 
     WHERE salesTyp='online' 
      AND productName = total.productName 
    )::float/count(*) * 100 as percentageofonline 
FROM testSales, total 
WHERE testSales.productName = total.productName 
GROUP BY total.productName, total.totalamount 

第一子請求計算總量,子請求用於百分比。

必須有一個更優化的方式來做到這一點,但這不工作