Postgresql 在Postgres中按值计算组的百分比值

Postgresql 在Postgres中按值计算组的百分比值,postgresql,group-by,percentage,Postgresql,Group By,Percentage,我想计算Group by中某个值的百分比。我的表格数据 salesId salesAmount productName salesTyp ------- ----------- ----------- -------- 1 50.00 mouse online 2 100.00 mouse shop 3 150.00 mouse sh

我想计算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
我想表现出的那种

productName   totalamount   percentageofonline
-----------   -----------   ------------------
      mouse           350                25.00
   keyboard           150                50.00
这里销售了4只鼠标(3只在商店,1只在网上),因此百分比为25.00
还有两个键盘被售出(一个在商店,一个在网上),所以百分比是50.00

请帮我拿。我已经创建了一个for表结构。

快速:

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
第一个子请求计算总金额,子请求用于百分比

必须有一种更优化的方法来实现这一点,但这确实起到了作用