首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法摆脱mysql查询中的重复

无法摆脱mysql查询中的重复
EN

Stack Overflow用户
提问于 2018-03-29 15:35:59
回答 1查看 101关注 0票数 0

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

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

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

这是我自己做的

代码语言:javascript
复制
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)前面,但答案是一样的。我遗漏了什么吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 15:55:15

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

代码语言:javascript
复制
SELECT
    SUM(`a`.`credits`) as `credits`
FROM (
    SELECT
        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`.`grade` DESC
    ) AS `a`

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49560029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档