这是我的问题的后续跟进:"MySQL: Querying a table and possibly replacing some fields with values from another table"
我有两张桌子。 Table1是我们的主要数据表,Table2有Table1列的子集和Table1中包含的记录的子集。您可以将Table2视为一个表,其中包含Table1记录的某些更正值。
以下是包含示例数据的表格:
表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 |
我想按照以下规则计算一个或多个field_ids的值的总和:
(1)如果指定的field_id之一的记录仅存在于Table1中,我想对其中field_id与指定的field_id匹配的所有记录的值和bla求和
(2)如果table1和Table2中都存在field_id,那么我们将得到Table2中的值和表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;
但我没有得到field_1的正确总和:
|field_id | Value Sum | Bla Sum|
---------------------------------
| 1 | 30 | 20 | <-- was expecting 10 and 5, respectively
| 2 | 66 | 6 |
你知道我可能做错了什么吗?
提前致谢!
答案 0 :(得分:0)
你还需要将page_id添加到JOIN,否则table1的3行和table2的4为field_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.date