如何在SQL中关联两表,计算列总和并显示指定额外列?
问题解决:关联表求和并输出关联列
已知Table1的num字段与Table2的id字段内容一致,可用于表关联。现有查询能通过SUM函数计算每个id对应的amt总和,但无法将Table2的location字段加入输出,需求是同时输出location列与求和结果。
现有查询代码:
Select num, sum(amt) From Table1 Inner join Table2 On id = num Group by num
解决方案
使用GROUP BY分组时,SELECT子句中的非聚合字段必须出现在GROUP BY子句中(若数据库支持非标准扩展,且该字段与分组键为一对一关联时可例外)。由于num(对应Table2的id)与location为一一对应关系,只需将location同时加入SELECT和GROUP BY即可:
修改后的SQL代码:
Select Table1.num, Table2.location, SUM(Table1.amt) AS total_amt From Table1 Inner Join Table2 ON Table2.id = Table1.num Group By Table1.num, Table2.location
补充说明
若同一个id对应多个不同的location,需根据业务需求处理:
- 要显示所有关联的location,可使用
GROUP_CONCAT(MySQL)或STRING_AGG(SQL Server/PostgreSQL)将多个location合并为一个字段 - 只需显示其中一个时,可使用
MAX(location)或MIN(location)这类聚合函数,无需将location加入GROUP BY
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

