MySQL:对两个联接表中的多个值进行条件求和
以下是我问题的后续内容: 我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表 以下是我的表格和示例数据: 表1MySQL:对两个联接表中的多个值进行条件求和,mysql,Mysql,以下是我问题的后续内容: 我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表 以下是我的表格和示例数据: 表1 | page_id | field_id | date | value | bla | --------------------------------------------------| | 1 | 1 | 2012-01-01 | 3 | 1 |
| page_id | field_id | date | value | bla |
--------------------------------------------------|
| 1 | 1 | 2012-01-01 | 3 | 1 |
| 2 | 1 | 2012-01-01 | 10 | 2 |
| 3 | 1 | 2012-01-01 | 25 | 2 |
| 1 | 2 | 2012-01-01 | 11 | 3 |
| 2 | 2 | 2012-01-01 | 22 | 1 |
| 3 | 2 | 2012-01-01 | 33 | 2 |
表2
| page_id | field_id | date | value |
-------------------------------------------
| 1 | 1 | 2012-01-01 | 1 |
| 2 | 1 | 2012-01-01 | 2 |
| 3 | 1 | 2012-01-01 | 3 |
| 4 | 1 | 2012-01-01 | 4 |
我想按照以下规则计算一个或多个字段ID的值之和:
(1) 如果指定字段_id之一的记录仅存在于表1中,我希望对字段_id与指定字段_id匹配的所有记录的值和bla求和
(2) 如果字段_id同时存在于表1和表2中,那么我们将从表2中获得值之和,从表1获得bla之和
以下是我正在使用的查询:
SELECT t1.field_id,
SUM(IFNULL(t2.value, IFNULL(t1.value,0))) as 'Value Sum',
SUM(IFNULL(t1.bla,0)) as 'Bla Sum'
FROM test.Table1 t1
LEFT JOIN test.Table2 t2 ON t1.field_id = t2.field_id
WHERE (t1.field_id IN (1,2))
GROUP BY t1.field_id, t1.date;
但我没有得到字段_1的正确总和:
|field_id | Value Sum | Bla Sum|
---------------------------------
| 1 | 30 | 20 | <-- was expecting 10 and 5, respectively
| 2 | 66 | 6 |
|字段| id |值和| Bla和|
---------------------------------
|1 | 30 | 20 |您还需要将页面| id添加到联接中,否则表1中的3行和表2中的4行会导致字段_id1出现12列
SELECT t1.field_id,
SUM(IFNULL(t2.value, IFNULL(t1.value,0))) as 'Value Sum',
SUM(IFNULL(t1.bla,0)) as 'Bla Sum'
FROM test.Table1 t1
LEFT JOIN test.Table2 t2 ON t1.field_id = t2.field_id AND t1.page_id =t2.page_id
WHERE t1.field_id IN (1,2)
GROUP BY t1.field_id;
还通过t1.日期删除了组