【问题标题】:SQL 2 sums of different tables that both reference a thirdSQL 2 不同表的总和,它们都引用了第三个
【发布时间】:2014-05-01 02:15:19
【问题描述】:

我对 SQL 很陌生,我试图根据学生是选修课时还是核心课时来获取学生所学学分的总和。我正在检查 COURSE_TAKEN 表,该表给出了他们所学的课程,然后比较所学的课程,看看它们是核心课程还是选修课,然后试图得到两个单独的总和。我最终得到了两个总和的 0,不知道为什么。

Select nvl(sum(C.Credit_Hours),0) As CoreCreditHours, 
       nvl(sum(C1.Credit_Hours),0) As ElectiveCreditHours
FROM COURSE C 
JOIN COURSE_TAKEN ON 
    C.CRN = COURSE_TAKEN.CRN
JOIN COURSE C1 ON
    C1.CRN = COURSE_TAKEN.CRN
WHERE C.CRN IN(
    SELECT MINOR_CORE_REQUIREMENTS.CRN
    FROM MINOR_CORE_REQUIREMENTS
    WHERE MINOR_CORE_REQUIREMENTS.Minor_Name = 'Computer Science')
AND C1.CRN IN (
    SELECT MINOR_ELECTIVE_REQUIREMENTS.CRN
    FROM MINOR_ELECTIVE_REQUIREMENTS
    WHERE MINOR_ELECTIVE_REQUIREMENTS.Minor_Name = 'Computer Science')
AND COURSE_TAKEN.H_Number = 1; 

【问题讨论】:

    标签: sql oracle join sum


    【解决方案1】:

    如果学生没有以下类别之一的课程,您需要使用外部联接:

    Select nvl(sum(C.Credit_Hours),0) As CoreCreditHours, 
           nvl(sum(C1.Credit_Hours),0) As ElectiveCreditHours
    FROM COURSE_TAKEN
    LEFT JOIN COURSE C ON 
        C.CRN = COURSE_TAKEN.CRN AND C.CRN IN(
            SELECT MINOR_CORE_REQUIREMENTS.CRN
            FROM MINOR_CORE_REQUIREMENTS
            WHERE MINOR_CORE_REQUIREMENTS.Minor_Name = 'Computer Science')
    LEFT JOIN COURSE C1 ON
        C1.CRN = COURSE_TAKEN.CRN AND C1.CRN IN (
            SELECT MINOR_ELECTIVE_REQUIREMENTS.CRN
            FROM MINOR_ELECTIVE_REQUIREMENTS
            WHERE MINOR_ELECTIVE_REQUIREMENTS.Minor_Name = 'Computer Science')
    WHERE COURSE_TAKEN.H_Number = 1; 
    

    【讨论】:

    • 非常感谢,太完美了!
    猜你喜欢
    • 2018-05-02
    • 2013-11-18
    • 2013-01-10
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多