sql - 如何在Presto的SQL(Athena)中计算从一年开始的每个月的平均值?

标签 sql select window-functions presto amazon-athena

下面是我拥有的表格数据的示例

| date       | value |
| 2020-01-01 |  20   |
| 2020-01-14 |  10   |
| 2020-02-02 |  30   |
| 2020-02-11 |  25   |
| 2020-02-25 |  25   |
| 2020-03-13 |  34   |
| 2020-03-21 |  10   |
| 2020-04-06 |  55   |
| 2020-04-07 |  11   |

我想生成如下结果集

| date       | value |  average                       |
| 2020-01-01 |  20   |  Jan average                   |
| 2020-01-14 |  10   |  Jan average                   |   
| 2020-02-02 |  30   |  Jan & Feb average             |
| 2020-02-11 |  25   |  Jan & Feb average             |
| 2020-02-25 |  25   |  Jan & Feb average             |
| 2020-03-13 |  34   |  Jan & Feb & Mar average       |
| 2020-03-21 |  10   |  Jan & Feb & Mar average       |
| 2020-04-06 |  55   |  Jan & Feb & Mar & Apr average |
| 2020-04-07 |  11   |  Jan & Feb & Mar & Apr average |

我尝试使用窗口函数 OVER() 和 PARTITION(),但我设法按月获取平均值,而不是从一年开始。

请提出任何建议。

谢谢

最佳答案

我想你想要:

select 
    t.*,
    avg(value) over(
        partition by year(date)
        order by month(date)
    ) running_avg
from mytable t

这会将每年放入一个单独的分区中,然后按月对分区行进行排序。

关于sql - 如何在Presto的SQL(Athena)中计算从一年开始的每个月的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62499681/

相关文章:

mysql - SQL 查询 - 从具有相同 ID 的多行中获取结果

MYSQL 搜索字符串是否包含特殊字符?

mysql - 选择元素分组依据的总数

sql - MySQL 嵌套聚合查询,选择特定的中间项

sql - RANK() OVER PARTITION 并重置 RANK

sql - Rails项目中的db/development_structure.sql是什么?

sql - SQL 查询中过多的空格会影响性能吗?

sql - 如何使用存储在 varchar 列中的路径更新 varbinary(max) 列?

mysql - 使用用户名而不是 ID 从 2 个表中检索数据

Postgresql:获取给定数据范围内的事务