본문 바로가기
My Image
프로그래밍/DataBase

[SQL] 실습문제

by Lim-Ky 2017. 12. 13.
반응형

정말 오랜만에 인사드립니다... 취업 준비 때문에 너무 정신이 없어서 ㅠㅠ .. 


다행히 취업을 해서 금융IT쪽을 가게 되었는데, SQL 직무연수를 받고있습니다..


오늘은 제가 잘 풀지 못했던 문제를 한번 피드백 해보는 시간을 가져볼까 합니다.. SQL을 잘하시면, 쉬워 보이겠죠??ㅎㅎ..


우선 구성 테이블은 다음과 같습니다.. ERD는 따로 제공받지 못했습니다.. 테이블로만 우선 보겠습니다.





문제 19번부터 보겠습니다.




우선 베이스는 ORACLE_11G입니다.


저는 이렇게 해볼까 합니다... 우선...문제의 요구 사항을 끊어보겠습니다.


1. 환경조경학과가 속한 같은 계열의 학과들


   -> 환경조경학과가 어떤 계열인지 파악하고 해당 계열과 같은 학과들을 학과테이블에서 부터 추출하겠습니다.


SELECT DEPARTMENT_NAME AS "계열 학과명"

FROM TB_DEPARTMENT

WHERE CATEGORY = (SELECT CATEGORY

  FROM TB_DEPARTMENT

  WHERE DEPARTMENT_NAME = '환경조경학과'); 





2. 학과 별 전공 과목 평점


   -> 성적 평점을 위해 그룹함수인 AVG와 숫자함수 ROUND를 이용 해당 평균평점을 구하고, 

       학과별 그룹의 평균을 구하기 위해 GROUP BY DEPARTMENT_NAME을 통해 그룹핑 시켜준다.


   -> 이제 평점인 POINT를 얻고 싶지만, 해당 학과테이블엔 없기 때문에 학점 테이블에 접근해야 한다. 

       하지만, 직접 접근할 수 없기 때문에, 학과테이블에 있는 학과번호를 통해 과목테이블 과목번호를 얻고

       해당 과목번호를 학점테이블에서 조회하여, AVG를 계산할 수 있도록 JOIN을 2번 한다.



--최종 SQL 구문 완성--


SELECT DEPARTMENT_NAME AS "계열 학과명",

       ROUND(AVG(POINT),1)

FROM TB_DEPARTMENT

JOIN TB_CLASS USING(DEPARTMENT_NO)

JOIN TB_GRADE USING(CLASS_NO)

WHERE CATEGORY = (SELECT CATEGORY

  FROM TB_DEPARTMENT

  WHERE DEPARTMENT_NAME = '환경조경학과') 

GROUP BY DEPARTMENT_NAME;






생각보다 어려웠습니다... GROUP BY JOIN 그리고 SUBQUERY까지 다채로운 조합이 필요한 SQL 구문이었습니다.  제가 푼 방법보다 좋은 방법이 있으시면, 알려주세요~


혹시 이와 비슷한 문제들이 필요하시면, 댓글 달아주세요. 문제 자료 드리겠습니다.


이상입니다.










반응형

댓글