在Postgres中按值计算Group的百分比值

Sat*_*h S 6 postgresql group-by percentage

我想计算Group by中值的百分比.我的表数据

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
Run Code Online (Sandbox Code Playgroud)

Out put我想表现得像

productName   totalamount   percentageofonline
-----------   -----------   ------------------
      mouse           350                25.00
   keyboard           150                50.00
Run Code Online (Sandbox Code Playgroud)

这里出售4只鼠标(商店3只,网上1只),所以百分比为25.00
,售出2个键盘(商店1个,网上1个),所以百分比为50.00

请帮我搞定.我已经为表结构创建了一个SQLFIDDLE.

小智 5

快速地:

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
Run Code Online (Sandbox Code Playgroud)

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

必须有一种更优化的方法来完成此任务