| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- backjoon
- 너비탐색
- 모바일
- 재귀함수
- 개발
- 네트워크
- 안드로이드
- 익명클래스
- CKLU
- 자바
- BFS
- Java
- 다이나믹 프로그래밍
- 금융IT
- 알고리즘
- 백준
- 익명객체
- dfs
- 삼성SW테스트
- dp
- 멀티스레드
- 조합
- Android
- 데이터베이스
- IT
- 언더라이터
- 삼성sw문제
- 백준 알고리즘
- 프로그래머스
- 현대오토에버 코딩테스트
- Today
- Total
Limky 삽질블로그
[SQL] 실습문제 본문
정말 오랜만에 인사드립니다... 취업 준비 때문에 너무 정신이 없어서 ㅠㅠ ..
다행히 취업을 해서 금융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 |