SQL关联查询Score求和异常问题排查(含表结构及SQL代码)
解决Table1与Table2关联后Score求和的问题
嘿,我看到你在关联table1和table2计算score总和时遇到了麻烦,你的原始SQL存在几个语法问题,导致没法得到正确结果。咱们来梳理一下,给出可行的解决方案:
问题分析
你的需求是:通过id关联table1和table2,计算每个id对应的score总和,最终输出code、id和对应总分数。但你的SQL里有重复的from、groupby拼写错误(正确写法是GROUP BY),而且子查询里的聚合结果没起别名,这些都会导致执行报错或者结果不符合预期。
正确的SQL实现
SELECT t1.code, t1.id, p.total_score AS score FROM table1 t1 INNER JOIN ( -- 先计算table2中每个id的score总和 SELECT id, SUM(score) AS total_score FROM table2 GROUP BY id ) p ON t1.id = p.id ORDER BY t1.code;
代码说明
- 子查询处理求和:首先对
table2按id分组,用SUM(score)计算每个id的总分数,并给这个结果起别名total_score,得到一个包含id和对应总分的临时结果集p。 - 关联两张表:用
INNER JOIN把table1和临时结果集p通过id字段关联起来,这样就能把table1里的code、id和对应的总分一一对应上。 - 排序优化:最后加上
ORDER BY t1.code,让结果按照code排序,和你期望的输出格式完全匹配。
测试结果
运行上面的SQL后,你会得到想要的输出:
| code | id | score |
|---|---|---|
| 1 | 12345 | 60 |
| 1 | 67533 | 50 |
| 2 | 87654 | 77 |
| 3 | 65432 | 67 |
小补充:如果table1里存在某些id在table2中没有对应记录的情况,你可以把INNER JOIN换成LEFT JOIN,此时这些id对应的score会显示为NULL,你可以根据实际业务需求选择合适的关联方式。
内容的提问来源于stack exchange,提问作者jsingh
相关产品推荐
相关产品推荐

