2016-09-21 76 views
1

我想查询3个表:studentstemplate_subjectssubjects第二度加入的列的总和?

studentstemplate_subjects表都有template_code列,这样我就可以通过这个专栏(我认为这是一个template_codes表和subjects表之间的数据透视表加入他们的行列,这是不是一个数据库我设计的,只是查询它现在)。

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

这里是我试过到目前为止:

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是里面占总受检单位某些模板代码。 (表名和列具有更复杂的名字,所以我简化了他们在这个问题请告诉我,我可能已经写在这个问题上的任何错误或混淆的部分。)

+1

你得学号=学生数和学生姓名= 201555101 – tomb

回答

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

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; 

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

+0

嗨,遗憾的混乱。 'template_subjects'没有单位列,它在'科目'表上。所以我可以将学生连接到template_subject,并将template_subject连接到基于subject_code的主题。 – christianleroy