MySQL新手求助:基于表1accId关联表2并求和amount的查询语句
实现基于表1 accId对表2 amount求和的MySQL查询
嘿,作为MySQL新手碰到这种关联表求和的需求完全没问题,我来给你拆解清楚怎么写对应的查询语句,保证好懂好用~
首先,核心思路是关联两张表,然后按accId分组,对每组的amount进行求和。这里分两种常见场景给你写示例:
场景1:只保留表2中有对应记录的accId(内连接)
如果只需要统计那些在表2里有交易记录的账户,用INNER JOIN就可以,它只会匹配两张表中accId完全一致的记录:
SELECT t1.accId, SUM(t2.amount) AS total_amount FROM 表1 t1 INNER JOIN 表2 t2 ON t1.accId = t2.accId GROUP BY t1.accId;
INNER JOIN 表2 t2 ON t1.accId = t2.accId:把表1和表2通过accId关联起来SUM(t2.amount):计算每个accId对应的所有amount总和,用AS total_amount给结果列起个好读的别名GROUP BY t1.accId:告诉MySQL要按accId来分组计算总和
场景2:保留表1所有accId,无记录的显示0(左连接)
如果希望表1里的所有账户都出现在结果里,哪怕表2中没有对应记录(此时总和显示0),就用LEFT JOIN配合COALESCE函数:
SELECT t1.accId, COALESCE(SUM(t2.amount), 0) AS total_amount FROM 表1 t1 LEFT JOIN 表2 t2 ON t1.accId = t2.accId GROUP BY t1.accId;
LEFT JOIN:会保留表1的所有记录,表2中没有匹配的话,amount会是NULLCOALESCE(SUM(t2.amount), 0):如果求和结果是NULL(也就是该账户没有交易记录),就把它转换成0,结果更直观
新手小提醒
- 确保两张表的
accId数据类型一致(比如都是INT或者VARCHAR),不然关联可能出问题 - 如果你的表名或列名包含空格、特殊字符,记得用反引号
`把它们包起来,比如`表1`
内容的提问来源于stack exchange,提问作者user1632949
相关产品推荐
相关产品推荐

