二级连接中列的和



我想查询3个表:students, template_subjectssubjects

studentstemplate_subjects表有一个template_code列,所以我可以通过这个列(我认为这是template_codes表和subjects表之间的数据透视表)连接它们。这不是我设计的数据库,只是现在查询它)。

现在,我需要从按template_code分组的subjects表中获得units列的总和。我该怎么做呢?

以下是我到目前为止所做的尝试:

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为某模板代码内主题的总单位。(表名和列的名称要复杂得多,所以我在这个问题中对它们进行了简化。

如果我在这个问题中写错了或者让人困惑的地方,请告诉我。

我想你需要这样的东西:

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;

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

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

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表。

最新更新