table 特定行 SQL 的每月平均数量

Average quantity per month on a table for a specific row SQL

我有以下 table:

        MONTHNUMBER | MonthName | ProductName | QTY | AMOUNT | AVG qty/mos|
      |-------------|-----------|-------------|-----|--------|------------|
      | 1           | January   | Thingamabob | 11  | 100.00 |            |
      | 1           | January   | Widgets     | 18  | 150.00 |            |
      | 2           | February  | Thingamabob | 10  | 100.00 |            |
      | 2           | February  | Widgets     | 6   | 150.00 |            |
      | 3           | March     | Thingamabob | 8   | 100.00 |            |
      | 3           | March     | Widgets     | 20  | 150.00 |            |
      | 4           | April     | Thingamabob | 13  | 100.00 |            |
      | 4           | April     | Widgets     | 21  | 150.00 |            |
      | 5           | May       | Thingamabob | 10  | 100.00 |            |
      | 5           | May       | Widgets     | 17  | 150.00 |            |

是否可以获取每一行的 MonthName 的平均数量并将其添加到 AVG qty/mos 列?

我想要的 table 是这样的:

        MONTHNUMBER | MonthName | ProductName | QTY | AMOUNT | AVG qty/mos|
      |-------------|-----------|-------------|-----|--------|------------|
      | 1           | January   | Thingamabob | 11  | 100.00 |    14.5    |
      | 1           | January   | Widgets     | 18  | 150.00 |    14.5    |
      | 2           | February  | Thingamabob | 10  | 100.00 |      8     |
      | 2           | February  | Widgets     | 6   | 150.00 |      8     |
      | 3           | March     | Thingamabob | 8   | 100.00 |     14     |
      | 3           | March     | Widgets     | 20  | 150.00 |     14     |
      | 4           | April     | Thingamabob | 13  | 100.00 |    16.5    |
      | 4           | April     | Widgets     | 21  | 150.00 |    16.5    |
      | 5           | May       | Thingamabob | 10  | 100.00 |    13.5    |
      | 5           | May       | Widgets     | 17  | 150.00 |    13.5    |

我试过下面的脚本,我会得到与 QTY 相同的结果。

SUM(QTY)/COUNT(DISTINCT(MonthName))

我希望 SQL 可以做到这一点。

您可以使用 avg window 函数来执行此操作。

select t.*,avg(qty) over(partition by monthnumber) as avg_qty_per_mnth
from tbl t 

你也可以在分区中使用月名

    select a.*,avg(QTY) over(partition by MonthName) as avgqty
    from tab a

但我认为最好使用 month and year 两者都应该在 partition by 因为 以后可能还需要你哪一年的一月