윈도우함수를 활용하여 구한 값을 group by 절에 사용할 수 있나요?
FIRST_VALUE(S.area) OVER (PARTITION BY C.title ORDER BY s.rank) as class_area <<- 아래 예시 쿼리 참고
윈도우함수나 그룹함수를 사용하지 않더라도 다른 방안이 있으면 조언 부탁드립니다. (속도가 빠른 방법을 선호합니다...)
예시) 각 수업별로 수강신청 학생 중에서 석차가 가장 높은 학생이 선호하는 지역에 수업을 개설한다면,
각 주제별로 각 지역에서 개설된 수업의 건수를 구하는 쿼리를 작성해보려고 합니다.
수업 (class)
제목 (title) |
주제 (subject) |
개설 지역 (class_area) |
가나다라 |
국어 |
? |
1111 |
수학 |
? |
1234 |
수학 |
? |
학생 (student)
이름 (name) |
석차 (rank) |
선호 지역 (area) |
뽀로로 |
1 |
강남 |
피카추 |
2 |
서초 |
꼬부기 |
3 |
송파 |
이상해 |
4 |
강남 |
파이리 |
5 |
서초 |
수강신청 (apply)
제목 (class.title) |
학생 (student.name) |
가나다라 |
뽀로로 |
가나다라 |
피카추 |
가나다라 |
꼬부기 |
1111 |
이상해 |
1111 |
파이리 |
1234 |
꼬부기 |
1234 |
파이리 |
쿼리 >>> 구문 오류로 실행 불가!
SELECT C.subject as subject,
FIRST_VALUE(S.area) OVER (PARTITION BY C.title ORDER BY s.rank) as class_area,
count(distinct C.title) as cnt
FROM class C
INNER JOIN apply A on A.title = C.title
INNER JOIN student S on S.name = A.name
GROUP BY C.subject, class_area
수강신청 목록 (3개 테이블 조인)
제목 (title) |
주제 (subject) |
이름 (name) |
석차 (rank) |
선호 지역 (area) |
가나다라 |
국어 |
뽀로로 |
1 |
강남 |
가나다라 |
국어 |
피카추 |
2 |
서초 |
가나다라 |
국어 |
꼬부기 |
3 |
송파 |
1111 |
수학 |
이상해 |
4 |
강남 |
1111 |
수학 |
파이리 |
5 |
서초 |
1234 |
수학 |
꼬부기 |
3 |
송파 |
1234 |
수학 |
파이리 |
5 |
서초 |
< 희망 결과 >
국어(가나다라) > 뽀로로(1) > 강남
수학(1111) > 이상해(4) > 강남
수학(1234) > 꼬부기(3) > 송파
결과
주제 (subject) |
개설 지역 (class_area) |
건수 (cnt) |
국어 |
강남 |
1 |
과학 |
강남 |
1 |
과학 |
송파 |
1 |
|