을 사용하여 조인 된 값의 행 선택 다음 스키마를 고려하십시오.MAX
학생 :
StudentID uniqueidentifier
Name varchar(max)
FKTeacherID uniqueidentifier
TestScore :
TestScoreID uniqueidentifier
Score int
FKStudentID uniqueidentifier
내 목표는 각 교사의 가장 높은 시험 점수를 달성 한 학생을 산출하는 쿼리를 작성하는 것입니다. 교사의 ID (Student.FKTeacherID)를 얻었을 때 얻은 점수 (TestScore.Score)와 그것을 성취 한 학생 (Student.Name).
내가 처음이 필요한 열을 얻기 위해 다음처럼 작성할 수 있습니다
SELECT FKTeacherID, MAX(Score) MaxScore
FROM Student
JOIN TestScore on FKStudentID = StudentID
GROUP BY FKTeacherID
을하지만 결과를 바꿀 것이다, GROUP BY 절에 추가하지 않고 관련 Student.Name를 얻을 수 없습니다 세트. - 여기에 공통 테이블 예입니다
SELECT
FKTeacherID, Name, Score
FROM
Student
JOIN TestScore on FKStudentID = StudentID
JOIN
(
SELECT
B.FKTeacherID AS TeacherID, MAX(A.Score) MaxScore
FROM
Student B
JOIN TestScore A on A.FKStudentID = B.StudentID
GROUP BY
B.FKTeacherID
) As TeachersMaxScore
ON TeachersMaxScore.TeacherID = FKTeacherID
AND TeachersMaxScore.MaxScore = Score
하위 쿼리'SELECT MAX (A.Score) MaxScore FROM TestScore A'는 하나의 레코드 만 반환합니다. 모든 TestScore 레코드의 최대 점수. 각 최대 점수 필요 교사 당 점수 –
내 요구 사항을 위반하는 중복 FKTeacherID 값을 반환 할 수 있습니다. –