我有 2 个表,第一个表是 head_order,其值如图所示
id_order name date
1 john 2018-05-11
2 andre 2018-05-11
3 johan 2018-06-11
4 louis 2018-06-11
5 brock 2018-07-11
6 peter 2018-07-11
第二个表是det_order
id_det id_head items g_total
1 1 5 100.000
2 2 11 75.000
3 3 7 80.000
4 4 8 80.500
5 5 4 220.000
6 6 6 226.000
基于这两个表,我制作了一份报告,显示每月购买的商品数量和 g_total 总和,我想添加另一个字段来显示本月 g_total 总和与上个月 g_total 总和的差异,这是我的 mySQL 查询
SELECT
MONTH(a.date) as mth ,
count(a.name) as cnt ,
sum(b.g_total) as sm ,
sum(b.g_total) -
(SELECT sum(x.g_total) FROM head_order y LEFT JOIN det_order x on y.id_order=x.id_head
WHERE MONTH(y.date) < MONTH(a.date) GROUP BY MONTH(y.date) limit 1 ) as cs,
(SELECT sum(x.g_total) FROM head_order y LEFT JOIN det_order x n y.id_order=x.id_head
WHERE MONTH(y.date) < MONTH(a.date) GROUP BY MONTH(y.date) limit 1 ) as pctg
FROM head_order a LEFT JOIN det_order b on .id_order=b.id_head
GROUP BY YEAR(a.date), MONTH(a.date)
结果如下
mth cnt sm cs pctg
5 2 175.000 null null
6 2 160.500 -14.500 175.000
7 2 446.000 271.000 175.000
什么时候应该像这样出现
mth cnt sm cs pctg
5 2 175.000 null null
6 2 160.500 -14.500 175.000
7 2 446.000 285.500 160.500
我的 mySQL 查询哪里出了问题?
最佳答案
在 limit 子句之前按 desc 排序就可以了
SELECT
MONTH(a.date) as mth ,
count(a.name) as cnt ,
sum(b.g_total) as sm ,
sum(b.g_total) -
(SELECT sum(x.g_total) FROM head_order y LEFT JOIN det_order x on y.id=x.id_head
WHERE MONTH(y.date) < MONTH(a.date) GROUP BY MONTH(y.date) order by month(y.date) desc limit 1 ) as cs,
(SELECT sum(x.g_total) FROM head_order y LEFT JOIN det_order x on y.id=x.id_head
WHERE MONTH(y.date) < MONTH(a.date) GROUP BY MONTH(y.date) order by month(y.date) desc limit 1 ) as pctg
FROM head_order a
LEFT JOIN det_order b on a.id=b.id_head
GROUP BY YEAR(a.date), MONTH(a.date);
+------+-----+---------+---------+---------+
| mth | cnt | sm | cs | pctg |
+------+-----+---------+---------+---------+
| 5 | 2 | 175.000 | NULL | NULL |
| 6 | 2 | 160.500 | -14.500 | 175.000 |
| 7 | 2 | 446.000 | 285.500 | 160.500 |
+------+-----+---------+---------+---------+
3 rows in set (0.00 sec)
关于mysql - 本月总和与之前的差异[mysql],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50812006/