mariadb 使用COUNT后,如何获得其他列上具有相同值的列的平均值?

6ie5vjzr  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(112)

我有以下疑问:

SELECT *, COUNT(id) AS number_of_orders
 FROM orders
 WHERE MONTH(date) = 5
 GROUP BY item_number, MONTH(date), YEAR(date);

我得到如下结果:

id | item_number  |      date      |  number_of_orders
1  |       4      |   2022-05-15   |       1 
2  |      43      |   2021-05-15   |       2
3  |      43      |   2022-05-15   |       2
4  |      51      |   2021-05-15   |       3
5  |      51      |   2022-05-15   |       3
6  |      51      |   2020-05-15   |       3

我需要得到每个特定月份每个项目的平均订单数。在这种情况下,它是五月(05)。
5月份每个项目#4的平均值为1
在五月份,每个项目#43的平均值为2
5月份每个项目#51的平均值为1
原始数据与上面的基本相同,不确定是否需要先执行COUNT步骤:

id | item_number  |      date      |  
1  |       4      |   2022-05-15   | 
2  |      43      |   2021-05-15   |     
3  |      43      |   2022-05-15   |     
4  |      51      |   2021-05-15   |     
5  |      51      |   2022-05-15   |      
6  |      51      |   2019-08-15   |
ilmyapht

ilmyapht1#

您可以始终只将第一个查询用作子查询,然后进一步聚合其结果

SELECT y, m, item_number, AVG(number_of_orders) as avg_number_of_orders
FROM (
    SELECT YEAR(date) y, MONTH(date) m, item_number, COUNT(id) AS number_of_orders
    FROM orders
    GROUP BY YEAR(date), MONTH(date), item_number
)
GROUP BY y, m, item_number

已编辑以使用正确的SQL分组

相关问题