我有一个事务表和一个标记表。我想获得按标记分组的交易表中所有交易的总和。有两种不同类型的交易:“预算”和“实际”组合两个由同一列分组的GROUP BY查询
这个查询将返回我什么,我想为“预算”的交易:
SELECT tg.name as tag, SUM(amount) as budgetTotal
FROM transaction tx
JOIN transaction_tag tt ON tt.transaction_id = tx.id
JOIN tag tg ON tg.id = tt.tag_id
WHERE tx.type = "budget"
AND tx.date >= '2011-07-15'
AND tx.date < '2011-08-15'
GROUP BY tg.name
,当然还有相当多的“同一个查询实际的”交易:
SELECT tg.name as tag, SUM(amount) as actualTotal
FROM transaction tx
JOIN transaction_tag tt ON tt.transaction_id = tx.id
JOIN tag tg ON tg.id = tt.tag_id
WHERE tx.type = "actual"
AND tx.date >= '2011-07-15'
AND tx.date < '2011-08-15'
GROUP BY tg.name
我的问题:我怎么组这两个查询的结果,成一个,所以我得到一个结果表有三列:标签,budgetTotal和actualTotal?
不它需要是'SUM(CASE WHITE tx.type =“actual”THEN amount END)AS actualTotal,'和分别代表'budgetTotal'?我的意思是,当你使用GROUP BY而不使用聚合(在这种情况下为SUM)时,你不应该引用'tx.type'。 –
在查询中,如果您在列上使用总数或计数或任何函数,则必须在所有列上执行[group by],不管您是否使用 ,如select a,b,c,sum(a),sum(b )从x group by a,b,c – Shahzeb
@Mitch:但是你的回答是正确的(@ rsbarro's也是这样),而这会在2'Total'列中显示错误的结果。它将随机地显示“SUM(金额)”(在所有行上,而不仅仅是“实际”或“预算”)或“NULL”。 –