来自二度连接的列的总和?

时间:2016-09-21 01:41:08

标签: mysql sql join subquery

我正在尝试查询3个表:studentstemplate_subjectssubjects

studentstemplate_subjects表格有template_code列,因此我可以通过此列加入它们(我认为这是template_codes表格之间的数据透视表。 subjects表。这不是我设计的数据库,只是现在查询它。

现在,我需要获取units表中subjects列的总和,该template_code表按SELECT s.studNo as 'Student Number', s.lastName as 'Student Name', s.template_code as 'Template Code', (SELECT sum(units) FROM subjects JOIN template_subjects ON subjects.subject_code=template_subjects.subject_code GROUP BY s.template_code) as 'Units' FROM students as s JOIN template_subjects ON template_subjects.template_code=s.template_code 分组。我该怎么办?

这是我到目前为止所尝试的内容:

Student Number | Student Name | Template Code | Units
201555101        Jane Doe       ACC301          35

我期望从查询中获得的是,例如:

Units

其中split是某个模板代码中主题的总单位。 (表名和列的名称要复杂得多,所以我在这个问题中对它们进行了简化。请告诉我在这个问题上可能写的任何错误或令人困惑的部分。)

2 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

SELECT s.studNo as `Student Number`, s.lastName as `Student Name`,
       s.template_code as `Template Code`,
       (SELECT sum(ts.units)
        FROM template_subjects ts  
        WHERE s.subject_code = ts.subject_code
       ) as Units
FROM students s;

也就是说,你只需要一个相关的子查询,而不是那么多的连接。

答案 1 :(得分:1)

如果有人需要答案,我就是这样做的:

SELECT 
s.studNo as 'Student Number',
s.lastName as 'Student Name',
s.template_code as 'Template Code',
(SELECT sum(units) 
FROM template_subjects
JOIN subjects ON template_subjects.subject_code=subjects.subject_code
WHERE template_subjects.templade_code=s.template_code) as 'Units'
FROM students as s
JOIN template_subjects ON template_subjects.template_code=s.template_code

请注意子查询中的这种差异:

WHERE template_subjects.templade_code=s.template_code

而不是:

GROUP BY s.template_code

而且,我没有在子查询中查询subjects表本身,而是查询了template_subjects并加入了subjects表。