2016-02-11 77 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 

第一子请求计算总量,子请求用于百分比。

必须有一个更优化的方式来做到这一点,但这不工作