如何合并两条SELECT语句实现多表关联的总分查询?
解决方案
当然可以合并这两条语句,以下是两种可行的实现方式,其中第一种效率更优:
方法一:先计算总分再关联(推荐)
通过子查询预先计算每个学生的总分,再将结果与学生表、班级表关联,避免先连接大量数据再分组:
SELECT class.NAME AS CLASS_NAME, student.NAME, score_total.total FROM class INNER JOIN student ON student.CLASS_ID = class.ID INNER JOIN ( SELECT ID, SUM(SCORE) AS total FROM score GROUP BY ID ) score_total ON score_total.ID = student.ID;
方法二:先关联所有表再分组
如果数据量不大,也可以先将三张表关联后再分组计算总分:
SELECT class.NAME AS CLASS_NAME, student.NAME, SUM(score.SCORE) AS total FROM class INNER JOIN student ON student.CLASS_ID = class.ID INNER JOIN score ON score.ID = student.ID GROUP BY class.NAME, student.NAME, student.ID;
两种方法都能得到你想要的结果集,优先推荐方法一,因为它先通过分组减少了需要关联的数据量,执行效率更高。
内容的提问来源于stack exchange,提问作者張德昱
相关产品推荐
相关产品推荐

