微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想计算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

Out put我想表现得像

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

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

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

解决方法

快速

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

一个子请求计算总金额,子请求用于百分比.

必须有一种更优化的方法来完成它,但这样做

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐