首页 > 解决方案 > 从另一列 sql / presto 计算百分比

问题描述

我有这张桌子

month_year  shopid  payment_method   count
Jul-19      3lokpn99    CC           115
Jul-19      3lokpn99    PAYPALL      1
Jul-19      6jyhikmm    CC           180
Jul-19      6jyhikmm    PAYPALL      7
Aug-19      3lokpn99    CC           108
Aug-19      3lokpn99    PAYPALL      4
Aug-19      6jyhikmm    CC           114
Aug-19      6jyhikmm    PAYPALL      3

我正在寻找的是计算当月每种付款方式的百分比。想要的结果是这样的

month_year  shopid  payment_method   count   %
Jul-19      3lokpn99    CC           115    99.14
Jul-19      3lokpn99    PAYPALL      1      0.86
Jul-19      6jyhikmm    CC           180    96.26
Jul-19      6jyhikmm    PAYPALL      7      3.74
Aug-19      3lokpn99    CC           108    96.43
Aug-19      3lokpn99    PAYPALL      4      3.57
Aug-19      6jyhikmm    CC           114    97.4
Aug-19      6jyhikmm    PAYPALL      3      2.56

标签: mysqlsqlpercentagepresto

解决方案


有不同的方法可能

  • 使用窗口函数
  • 自加入聚合(如 Wojciech 的回答中所述)

Window Functions 方法具有额外的优势,即源数据只能读取一次。

SELECT month_year, shopid, payment_method, count,
    100e0 * count / sum(count) OVER (
        PARTITION BY month_year, shopid
        RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
        AS "%"
FROM ...

(在 Presto 318 上测试)

请参阅 Presto 窗口函数文档 https://trino.io/docs/current/functions/window.html


推荐阅读