MySQL:从按类别组织的两列中获取总计
考虑MYSQL数据库中的下表: 表1:MySQL:从按类别组织的两列中获取总计,mysql,sql,Mysql,Sql,考虑MYSQL数据库中的下表: 表1: +------+-----------+----------------------+ | id | atual | category_id | user | +------+-----------+--------------|-------+ | 1 | 100 | 1 | 1 | | 2 | 150 | 2 | 1 | | 3 |
+------+-----------+----------------------+
| 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
。我需要几个小时来考虑这是如何完成的,但它工作正常,谢谢!