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
因为
以后可能还需要你哪一年的一月
我有以下 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
因为
以后可能还需要你哪一年的一月