정말 오랜만에 인사드립니다... 취업 준비 때문에 너무 정신이 없어서 ㅠㅠ ..
다행히 취업을 해서 금융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 구문이었습니다. 제가 푼 방법보다 좋은 방법이 있으시면, 알려주세요~
혹시 이와 비슷한 문제들이 필요하시면, 댓글 달아주세요. 문제 자료 드리겠습니다.
이상입니다.
'프로그래밍 > DataBase' 카테고리의 다른 글
[DataBase] NULL 처리 함수 (0) | 2018.03.20 |
---|---|
[DataBase] OUTER JOIN (외부조인) LEFT,RIGHT,FULL JOIN (7) | 2018.02.06 |
[DataBase] FROM 절에 사용하는 JOIN 의 형태 (0) | 2018.01.27 |
[DB] SQLPLUS로 SQL Script 실행(SQLD 실습환경) (0) | 2018.01.23 |
[DataBase] MySQL 5.7 설치 방법 (0) | 2017.08.30 |
댓글