mysql - 本月总和与之前的差异[mysql]

标签 mysql

我有 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/

相关文章:

php - CodeIgniter/Pyrocms - 如何改变我的自定义模块子导航以适应该部分?

mysql - 使用MYSQL根据给定日期获取当前期间

mysql - 如何将SQL Server 数据库迁移到MySQL?

mysql - 如何将联合引擎安装到我的 mariadb?

mysql - Kubernetes 没有将数据复制到已安装的卷中

mysql - 按日期从当前每条记录中获取上一条记录

mysql - 优化自连接表

mysql - 基于相关表中的列值的唯一性约束

php - 与 html、json 和 jquery 的乘法

mysql - 如何在sql中得到不同的结果?