在SQL中使用多个内置函数时如何使用group by
我想写一个查询,列出课程总学分最高的学生。结果还应显示学生注册的课程数量以及最高总学分 我的问题是在SQL中使用多个内置函数时如何使用group by,sql,oracle,Sql,Oracle,我想写一个查询,列出课程总学分最高的学生。结果还应显示学生注册的课程数量以及最高总学分 我的问题是 SELECT COUNT(COUNT(COURSE.COURSE_NO)) AS "Number of courses", MAX(SUM(COURSE.CREDITS)) AS "Total Credits" FROM STUDENT JOIN ENROLLMENT ON ENROLLMENT.S_ID = STUDENT.S_ID JOIN COURSE_SECTION ON COUR
SELECT
COUNT(COUNT(COURSE.COURSE_NO)) AS "Number of courses",
MAX(SUM(COURSE.CREDITS)) AS "Total Credits"
FROM
STUDENT
JOIN ENROLLMENT
ON ENROLLMENT.S_ID = STUDENT.S_ID
JOIN COURSE_SECTION
ON COURSE_SECTION.C_SEC_ID = ENROLLMENT.C_SEC_ID
JOIN COURSE
ON COURSE.COURSE_NO = COURSE_SECTION.COURSE_NO
GROUP BY STUDENT.S_ID;
结果是:
Number of courses Total Credits
----------------- -------------
6 21
属于某个学生的
如何显示学生ID和结果?当我将STUDENT.S_ID放入SELECT子句时,它会触发一个错误“非单个组函数”。我相信您希望:
SELECT e.*
FROM (SELECT e.S_ID
COUNT(*) as num_courses,
SUM(c.CREDITS) AS total_credits,
RANK() OVER (ORDER BY SUM(c.CREDITS)) as seqnum
FROM ENROLLMENT e JOIN
COURSE_SECTION cs
ON cs.C_SEC_ID = e.C_SEC_ID JOIN
COURSE c
ON c.COURSE_NO = cs.COURSE_NO
GROUP BY e.S_ID
) e
WHERE seqnum = 1;
这将返回具有最大学分数的所有学生。毕竟,这样的学生可能不止一个
其他说明:
- 表别名使查询更易于编写和读取
- 不需要表
,因为学生id位于STUDENTS
中ENROLLMENT
- 使用简单的列别名,因此不必转义名称