在mysql查询中无法摆脱重复

时间:2018-03-29 15:36:00

标签: mysql

我正在为我的数据库类完成一些查询,而且我遇到了一个我似乎无法获得的查询。

它说:“对于ID为”20084“(或任何其他值)的学生,显示所学课程的学分总数。不显示学生表中的tot_creds值,您应该使用SQL聚合学生参加的课程。“

我在网上找了一些答案,但没有一个真正让我信服,基本上所有这些都给了我不同的结果。

我自己有这个:

select    sum(credits)
from      (course join section using(course_id)) join (takes join student using(ID))
          using (course_id, sec_id, semester, year)
where student.ID = 20084;

我遇到的问题是学生重复了几门课程,并且查询也返回了重复课程的学分。我已经尝试将distinct放在sum(credits)前面,但答案是一样的。 有什么我想念的吗? 感谢。

The model I have to work with.

1 个答案:

答案 0 :(得分:0)

这应该返回你要找的东西。在子选择中,我使用了MAX(),即使重复项的值是相同的,因此它将从重复的行返回一个结果。此子选择将为每个课程实例返回一行,因此其总和不包括重复的课程。

SELECT
    `section`.`course_id`,
    `section`.`sec_id`,
    `section`.`semester`,
    `section`.`year`,
    MAX(`course`.`credits`) AS `credits`
FROM `student`
JOIN `takes` 
    ON `takes`.`ID` = `student`.`ID`
JOIN `section`
    USING (`course_id`,`sec_id`,`semester`,`year`)
JOIN `course`
    ON `course`.`course_id` = `section`.`course_id`
WHERE `student`.`ID` = 20084
GROUP BY `section`.`course_id`
ORDER BY `takes`.course_id`,`takes`.`grade` DESC

要测试子查询,请尝试运行此查询。它应该返回所有课程的列表,每门课程只有一行:

{{1}}