MySQL:从按类别组织的两列中获取总计

MySQL:从按类别组织的两列中获取总计,mysql,sql,Mysql,Sql,考虑MYSQL数据库中的下表: 表1: +------+-----------+----------------------+ | id | atual | category_id | user | +------+-----------+--------------|-------+ | 1 | 100 | 1 | 1 | | 2 | 150 | 2 | 1 | | 3 |

考虑MYSQL数据库中的下表:

表1:

+------+-----------+----------------------+
| id   |   atual   | category_id  |  user |
+------+-----------+--------------|-------+
| 1    |   100     |  1           |   1   |
| 2    |   150     |  2           |   1   |
| 3    |   50      |  1           |   2   |
+------+-----------+--------------|-------+
表2:

+------+-----------+----------------------+
| id   |   budget  | category_id  |  user |
+------+-----------+--------------|-------+
| 1    |   100     |  2           |   1   |
| 2    |   150     |  1           |   2   |
| 3    |   50      |  1           |   1   |
+------+-----------+--------------|-------+
表3:

+------+-----------+
| id   |   name    | 
+------+-----------+
| 1    |   one     |
| 2    |   two     |
| 3    |   three   |
+------+-----------+
我想计算表1和表2中给定用户(在我的示例中为1)的“年度”和“预算”总计,按类别名称组织:

我尝试了以下查询,该查询给出了不分类别的年度和预算总额:

SELECT table2.id, table3.name AS name_category, SUM( budget ) , 
(SELECT SUM( atual) FROM table1 WHERE user =1)
FROM table2 INNER JOIN table3
ON table2.category_id=table3.id
以下是一种方法:

select t3.id, t3.name, sum(actual) as actual, sum(budget) as budget
from ((select category_id, sum(actual) as actual, NULL as budget
       from table1
       where user = 1
       group by category_id
      ) union all
      (select category_id, NULL as actual, sum(budget) as budget
       from table2
       where user = 1
       group by category_id
      )
     ) ab join
     table3 t3
     on ab.category_id = t3.id
group by t3.id, t3.name;

这个问题假设按类别组织,所以我认为内部查询应该有GROUP by category_id和SELECT部分中的“category_id”字段。这看起来很奇怪,但(几乎)起作用了:它正确地添加了按类别分组的实际值,但将所有预算值添加到了一个类别中(尽管有多个类别的预算)预算数字以总额的形式呈现,其中实际数字为:Null@NunoNogueira…问题已解决。我仍在
预算
子查询中选择
用户ID
。我需要几个小时来考虑这是如何完成的,但它工作正常,谢谢!