如何在sql中的多个字段上使用GROUPBY语句?

kninwzqo  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(299)

我有以下表格:
有字段的studentprofile RollNumber , Major 我有领域的学生注册 RollNumber , CourseCode , Section , Semester 我有领域的部门费用 DepartmentName , Semester , Fees 我要做的是找出一个学生在某个学期必须支付的费用。问题是studentenrollment表有多个重复值,这使得很难找到确切的费用。
我的学生登记表是这样的:

RollNO     |CourseCode     |Section     |Semester
-----------+---------------+------------+------------
ST-0001    |BIOL 300       |A           |Fall   2018
ST-0001    |BIOL 500       |A           |Spring 2018
ST-0001    |BIOL 450       |B           |Spring 2018
ST-0001    |BIOL 475       |A           |Spring 2018
ST-0002    |CHEM 500       |A           |Spring 2018
ST-0002    |CHEM 450       |B           |Spring 2019

现在有了卷数和学期的重复值,我怎样才能得到正确的答案。如果我使用 GROUP BY (StudentEnrollment.RollNo) ,卷号不重复,我无法得到学生参加的所有学期,如果我使用 GROUP BY (StudentEnrollment.RollNo) 我没有把所有学生的卷号都记在学期表上。
起初我试着用

Select 
    a.RollNo, 
    b.Semester, 
    c.Fees
FROM StudentProfile         a
LEFT JOIN StudentEnrollment b ON b.RollNo = c.RollNo 
LEFT JOIN DepartmentFees    C ON c.DepartmentName = a.Major //AND maybe join semester?

但似乎不起作用。下一步我能试试什么?

kb5ga3dv

kb5ga3dv1#

只需将列添加到GROUPBY子句:

Select 
    a.RollNo, 
    b.Semester, 
    sum(c.Fees) AS 'total'

FROM StudentProfile         a
LEFT JOIN StudentEnrollment b ON b.RollNo = c.RollNo 
LEFT JOIN DepartmentFees    C ON c.DepartmentName = a.Major //AND maybe join semester?
GROUP BY 
    a.RollNo, 
    b.Semester
e37o9pze

e37o9pze2#

既然您在select语句中提到了b.EXTERM、c.fees,所以要执行group by rollno和EXTERM,请在group by子句中添加a.rollno和b.EXTERM,我使用了“join”而不是“left join”,因为当您只想返回两边都有对的记录时,请使用join/inner join,当需要“left”表中的所有记录时,不管它们在“right”表中是否有对,都将使用left join。

Select 
    a.RollNo, 
    b.Semester, 
    sum(c.Fees) AS 'total'

FROM StudentProfile         a
JOIN StudentEnrollment b ON b.RollNo = c.RollNo 
JOIN DepartmentFees    C ON c.DepartmentName = a.Major
GROUP BY 
    a.RollNo, 
    b.Semester

相关问题