关于mysql:SQL查询计算并显示一年中每个月的和数据

SQL query calculate and display sum data per each month of the year

我有'orders'表,其中包含以下数据:

1
2
3
4
5
6
7
8
---------------------------------
id     |   amount  |  order_date  
---------------------------------
1      |   100.00  |  2018-03-12
2      |   120.00  |  2018-03-25
3      |   200.00  |  2018-04-10
4      |   250.00  |  2018-04-20
5      |   300.00  |  2018-05-02

我想在当前年份显示每个月的SUM('金额'),我想稍后使用此数据创建图表。

我希望达到这样的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---------------------------------
month        |   sum(amount)
---------------------------------
January      |   0.00  
February     |   0.00
March        |   320.00
April        |   450.00
Mai          |   300.00
June         |   0.00
July         |   0.00
August       |   0.00
September    |   0.00
October      |   0.00
November     |   0.00
December     |   0.00

我创建了一个单独的表'月',其中包含一年中的所有月份,然后我离开加入'订单',但它不起作用,这是我使用的查询。

请帮忙。

1
2
3
4
SELECT months.month, IFNULL( sum(orders.amount), 0 ) AS amount
FROM months
LEFT OUTER JOIN orders ON month(orders.order_date) = months.month
GROUP BY months.month

更新

最后我使它工作这是我的查询

1
2
3
4
5
SELECT IFNULL( sum(orders.amount), 0 ) AS amount
FROM months
LEFT OUTER JOIN orders ON monthName(orders.order_date) = months.month
GROUP BY months.month
Order BY FIELD(MONTH,'January','February','March','April', 'May', 'June', 'Jully', 'August', 'September', 'October', 'November', 'December')


month()函数返回一个数字,而不是月份的名称。

使用monthname()函数或将月份号存储在助手表中,而不是月份名称。 后者稍微更可靠,因为mysql的语言设置会影响monthname()函数的返回值。