у меня есть таблицы
TBL_STD_MARKS
SCHOOL_ID SYMBOL_NO AVG_GPA
1 211 3.8
1 255 3.5
1 212 2.90
2 311 3.85
2 312 3.75
3 411 2.98
3 412 3.00
TBL_STD_INFO
SCHOOL_ID SYMBOL_NO STUDENT_NAME GENDER
1 211 S1 M
1 255 S2 F
1 212 S3 M
2 311 S22 M
2 312 S23 M
3 411 S31 M
3 412 S32 F
TBL_SCHOOL
SCHOOL_ID SCHOOL_NAME
1 SCHOOL11
2 SCHOOL22
3 SCHOOL33
Я пытаюсь написать запрос, чтобы получить самый высокий балл AVG_GPA
среди учеников из каждой школы. Но мой запрос дает все строки таблицы.
WITH cte
AS (
SELECT D.SCHOOL_NAME
,A.SYMBOL_NO
,B.STUDENT_NAME
,B.GENDER
,A.AVG_GPA
FROM TBL_STD_MARKS A
INNER JOIN TBL_STD_INFO B ON A.SYMBOL_NO = B.SYMBOL_NO
INNER JOIN TBL_SCHOOL D ON A.SCHOOL_ID = D.SCHOOL_ID
)
SELECT SCHOOL_NAME
,SYMBOL_NO
,STUDENT_NAME
,MAX(DISTINCT CASE
WHEN GENDER = 'M'
THEN AVG_GPA
END) AS MALE_GPA
,MAX(DISTINCT CASE
WHEN GENDER = 'F'
THEN AVG_GPA
END) AS FEMALE_GPA
FROM CTE
GROUP BY SCHOOL_NAME,SYMBOL_NO
,STUDENT_NAME