관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

그룹 함수와 윈도우 함수 8 - 미션 문제 풀기 및 단원 마무리하기 본문

알고리즘 및 자료 관리/SQL

그룹 함수와 윈도우 함수 8 - 미션 문제 풀기 및 단원 마무리하기

huenuri 2024. 10. 24. 16:26

이제 미션 문제를 풀어볼 것이다. 이번 단원은 많이 어려워서 과연 미션 문제를 하나라도 풀 수 있을지 의문이 든다. 그래도 하나씩 차근차근 단계를 따라가 보면 반드시 문제를 풀 수 있다.


 

 

 

 

미션 1 - 키 순서대로 줄 서보기

 

 


 

 

 

 

 

1. 테이블 조회하기

 

 


 

 

 

 

 

2. 순위함수를 사용해서 키와 이름을 오름차순으로 정렬하기

 

 

 

 

 

뭔가 틀렸다고 한다. 정렬이 잘 되지 않은 것 같다. 다시 코드를 작성해 보자.


 

 

 

 

3. 정렬 순서를 바꿔서 코드 수정하기

 

 

 

 

문제를 잘 풀었다. 무척 어려울 줄 알았는데 충분히 풀 수 있었다.


 

 

 

 

 

미션 2 - B등급 누가 받을까

 

 


 

 

 

 

 

1. 테이블 조회하기

 

 

 

우선 B등급을 받는 학생들의 번호를 출력하기 위해서 ID와 성적 정보가 담겨있는 STUDENT 테이블을 통해 상위 30% 초과, 상위 70% 이내 학생들의 ID를 확인해 볼 것이다.


 

 

 

 

2. 그룹 내 비율 함수 CUME_DIST()를 이용하여 학생들의 점수를 내림차순을 기준으로 누적 백분율 구하기

 

 

 

 ID와 점수를 조회하고, 점수를 기준으로 내림차순 정렬하여 누적 백분율을 계산했다. 마지막으로 ID를 기준으로 오름차순으로 정렬해 주었다.


 

 

 

 

3. FROM절 서브쿼리로 활용하여 누적 백분율을 만족하는 학생들에 대해서 ID, 점수, 누적 백분율을 조회

 

 

 

이 학생들 중에서 상위 30% 초과, 70% 이내를 만족하는 핵생들을 조회했다.

 

 

 

이 문제는 많이 어려워서 헬퍼에게 물어보면서 풀었다.  다음에 꼭 다시 풀어볼 문제이다.


 

 

 

 

미션 3 - 점수 평균

 

 


 

 

 

 

1. 테이블 조회하기

 

 

 

STUDENT 테이블에는 ID, 학과, 학년 정보가 담겨있고 COURSE_SCORE 테이블에는 학생 ID, 수업 이름, 점수 정보가 담겨있다. STUDENT 테이블의 ID와 COURSE_SCORE 테이블의 학생 ID를 기준으로 JOIN을 이용하여 결합하고, 수업 이름과 학과에 대해서 ROLLUP을 이용하여 수업/학과별 평균, 수업별 평균, 전체 평균을 구해볼 것이다.


 

 

 

 

2. JOIN을 사용하여 각 테이블의 ID와 학생 ID를 기준으로 결합하기

 

 

 

STUDENT 테이블과 COURSE_SCORE 테이블을 INNER JOIN으로 결합한다. 이때, 각 테이블의 ID와 학생 ID를 기준으로 결합해야 한다.


 

 

 

3. ROLLUP 함수로  점수에 대한 평균 구하기

 

위의 쿼리에서 얻은 결과에 대해 수업 이름(COURSE_NAME)과 학과(DEPARTMENT)에 대해 ROLLUP을 사용하여 평균 점수를 계산한다. 그런 다음 AVG(SCORE)를 사용하여 각 그룹의 평균 점수를 계산한다.

 

 

하지만 이런 오류가 떴다. 이 오류는 사용하고 있는 데이터베이스에서 ROLLUP 문법이 잘못 적용되었기 때문에 발생한 것이다. ROLLUP은 GROUP BY와 함께 사용해야 하므로 코드를 다시 수정해 보겠다.


 

 

 

 

4. 코드 다시 수정하기

 

 

 

이렇게 해서 수업별 평균, 학과별 평균, 전체 평균도 함께 출력했다. 

 


 

 

 

 

 

4장을 닫으며

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

학습을 마치고

이로써 SQL 심화 과정 학습을 모두 마쳤다. 미션 문제 두 문제는 스스로 푼 게 아니라 다음에 꼭 복습을 해볼 것이다. 오늘도 오후에 일정이 있어서 이제 공부할 시간이 20분도 남지 않았다. 저녁에는 SQL 책으로 아직 학습하지 못한 스토어드 프로시저에 대해서 공부해 볼 생각이다.

그동안 4주 차의 모든 과정을 단 3일 동안 공부하느라 정말 수고가 많았다.