我喜欢这张表
MySQL> select * from order;
+-----+-------------+---------------+
| id | order_total | payment_date |
+-----+-------------+---------------+
| 1 | 35 | 2015-05-17 |
| 2 | 35 | 2015-03-17 |
| 3 | 65 | 2015-02-04 |
| 4 | 39 | 2015-01-01 |
| 5 | 19 | 2015-01-21 |
| 6 | 27 | 2015-10-21 |
| 7 | 74 | 2015-02-15 |
| 8 | 81 | 2015-09-13 |
| 9 | 86 | 2015-03-01 |
| 10 | 42 | 2015-07-08 |
| 11 | 73 | 2015-05-19 |
| 12 | 78 | 2015-07-20 |
| 13 | 92 | 2015-02-04 |
......
|1913 | 71 | 2015-11-04 |
+-----+-------------+---------------+
我需要结果向我展示2015年的每月付款 我尝试使用
SELECT MONTHNAME(payment_date),
SUM(order_total)
FROM order
GROUP BY YEAR(payment_date),
MONTH(payment_date)
但它没有给出零个月 我也看了question,但他有两张桌子 我需要结果向我显示每月付款总额如此
+-----+-------+
| MM | Total |
+-----+-------+
| 01 | 5735 |
| 02 | 2535 |
| 03 | 1065 |
| 04 | 0 |
| 05 | 919 |
| 06 | 0 |
| 07 | 2874 |
| 08 | 0 |
| 09 | 6086 |
| 10 | 2042 |
| 11 | 1973 |
| 12 | 0 |
+-----+-------+
答案 0 :(得分:1)
这几个月需要一个行来源,你需要返回12行。有几种可行的方法可以做到这一点。一种方法是使用内联视图返回十二行,而不创建表。
例如:
s = '<tag>uTSqUYRR8gapple</tag><tag>K9VGTZM3h8</tag><tag>pearTYysnMXMUc</tag><tag>udv5NZQdpzpearz5a4oS85mD</tag>'
import re; re.findall("<tag>.*?</tag>", s)
答案 1 :(得分:0)
您需要一个包含所有月份的月份表。选中 answer
<强> allMonths 强>
id, year, month
然后创建左连接
SELECT a.year, a.month, COALESCE(SUM(o.order_total ),0) as total
FROM allMonths a
LEFT JOIN orders o
ON a.year = YEAR(payment_date)
AND a.month = MONTH(payment_date)
GROUP BY a.year,
a.month
编辑:
此外,您可以随时将日期截断为月份的第一天,而不是使用月份和年份
SELECT DATE_FORMAT(payment_date, '%Y-%m-01');
在这种情况下,加入条件很容易保存,例如yyyy-mm-01
ON a.month = DATE_FORMAT(payment_date, '%Y-%m-01')