【发布时间】:2016-03-04 06:45:55
【问题描述】:
我正在尝试通过使用 sum 的查询来选择行。我不断收到错误column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 我将指定的列添加到 group by 子句,它只是转到查询中的下一列。我真的必须将 select 子句中的每一列都添加到 group by 子句吗?
这是我的查询:
SELECT
s.studentId, s.firstName, s.lastName,
c.courseId, c.courseName, c.semesterId AS courseSemesterId,
se.semesterId, se.season, se.year,
e.enrollmentId, e.studentId AS enrolledStudentId, e.courseId AS enrolledCourseId, e.semesterId AS enrolledSemesterId,
a.assignmentId, (sum(a.pointsEarned) / sum(a.pointsPossible)) AS percentage
FROM Students AS s
INNER JOIN Enrollment AS e ON s.studentId = e.studentId
LEFT JOIN Courses AS c ON e.courseId = c.courseId
LEFT JOIN Semesters AS se ON c.semesterId = se.semesterId
LEFT JOIN Assignments AS a ON e.enrollmentId = a.enrollmentId
GROUP BY s.studentId, s.firstName, s.lastName
ORDER BY e.courseId
【问题讨论】:
-
是的,
GROUP BY子句中的所有列都必须在SELECT中,但聚合函数中使用的列除外。 -
那么您是否希望从
assignments或其中的每一行获取聚合值?因为您的选择列表中实际上有a.assignmentID,这意味着您需要单独的每一行。
标签: sql-server