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 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') |
-
请注意,您还需要在ON子句中为"当前年份"中的条件。
-
考虑处理应用程序代码中数据显示的问题
month()函数返回一个数字,而不是月份的名称。
使用monthname()函数或将月份号存储在助手表中,而不是月份名称。 后者稍微更可靠,因为mysql的语言设置会影响monthname()函数的返回值。
-
谢谢,monthname()为我工作,我还有一个问题,因为月份是文本格式我不能让ORDER BY完美地工作有没有办法解决这个问题,我希望结果从1月开始。到十二月
-
使用月份()按...排序
-
不幸的是它没有用
-
如果您有任何后续问题,请将它们作为新问题发布,并正确解释您尝试过的内容以及遇到的错误。
-
@IdilassiJassi这个问题也应该通过接受答案来标记为解决,这解决了原来的问题,而不是事后的事情。
-
我从@Shadow得到的答案解决了一半的问题,这就是为什么我不认为它是最终的解决方案
-
我用最终解决方案更新了我的问题,谢谢@Shadow的帮助
-
@IdilassiJassi我完全回答了这个问题。任何后续问题都应单独询问。您不得在评论中继续询问进一步的细节。