Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从另一列sql/presto计算百分比_Mysql_Sql_Percentage_Presto - Fatal编程技术网

Mysql 从另一列sql/presto计算百分比

Mysql 从另一列sql/presto计算百分比,mysql,sql,percentage,presto,Mysql,Sql,Percentage,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

我有这张桌子

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

可能有不同的方法

  • 使用窗口函数
  • 带聚合的自连接(如Wojciech的回答中所示)
窗口函数方法的另一个优点是源数据只能读取一次

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窗口函数文档
可能有不同的方法

  • 使用窗口函数
  • 带聚合的自连接(如Wojciech的回答中所示)
窗口函数方法的另一个优点是源数据只能读取一次

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窗口函数文档

您可以通过查询获得此结果:

SELECT s.*, ROUND(s.count / ss.count_summed * 100,2) AS `%`
FROM stack s
JOIN (SELECT s.month_year, s.shopid, SUM(s.count) AS count_summed FROM stack s GROUP BY s.month_year, s.shopid) ss ON ss.month_year = s.month_year AND ss.shopid = s.shopid;

您可以通过查询来实现此结果:

SELECT s.*, ROUND(s.count / ss.count_summed * 100,2) AS `%`
FROM stack s
JOIN (SELECT s.month_year, s.shopid, SUM(s.count) AS count_summed FROM stack s GROUP BY s.month_year, s.shopid) ss ON ss.month_year = s.month_year AND ss.shopid = s.shopid;

thx人。但是,在运行查询之后。我想我需要从窗口函数中删除付款方法。它可以很好地工作,没有付款方式作为分区。再次感谢你再次帮助我。但是,在运行查询之后。我想我需要从窗口函数中删除付款方法。它可以很好地工作,没有付款方式作为分区。再次感谢你再次帮助我