mysql - 从另一列 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
解决方案
有不同的方法可能
- 使用窗口函数
- 自加入聚合(如 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
推荐阅读
- ruby-on-rails - Ruby 哈希值可以在其值中包含一个数组吗?
- ruby - 如何解释此调试器输出?
- javascript - 如何在使用 javascript 进行处理之前检查客户端区域设置日期时间是否正确?
- android - 为什么我在 Google Play 控制台中收到 SMS 和 CALL_LOG 警告,当我的应用程序不使用任何远程接近这些权限的东西时?
- python-3.x - “分段错误:11”是什么意思?怎么修?
- haskell - 为什么 Haskell 变量在被模式匹配绑定时不是多态的?
- java - 无法从 Android ArrayList 中删除重复值
- python - OSError: [WinError 193] %1 不是有效的 Win32 应用程序 (LibTiff)
- hive - 从 SAS 到 Hive 的数据摄取
- python - 用 Python 实现猜词游戏