티스토리 뷰

GROUP BY  COLUMN명 별 COLUMN명을 조회한다.

DISTINCT와의 차이 : 집계 함수를 사용할 수 없다. GROUP BY는 사용 가능하다.

SELECT [COLUMN], [COLUMN], [...]

FROM [TABLE]

WHERE [CONDITIONS]

GROUP BY [COLUMN], [COLUMN], [...]



예시1.
1
2
3
4
5
6
7
8
-- 부서, 매니저ID 별 MANAGER_ID, DEPARTMENT_ID를 구한다.
SELECT  MANAGER_ID
        , DEPARTMENT_ID
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
        , MANAGER_ID
ORDER   BY MANAGER_ID, DEPARTMENT_ID
;
cs


집계함수    주로 GROUP BY와 함께 쓴다.


예시1.

1
2
3
4
5
6
-- 부서ID별 사원수를 구한다.
SELECT  DEPARTMENT_ID
        , COUNT(EMPLOYEE_ID)
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
;
cs

결과

예시2.

결과

예시 3. 

1
2
3
4
5
6
7
8
-- 전체 사원 중, 가장 높은 연봉과 가장 낮은 연봉
-- 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
SELECT  MAX(SALARY)
        , MIN(SALARY)
        , SUM(SALARY)
        , AVG(SALARY)
FROM    EMPLOYEES
;
cs

결과

예시4.

1
2
3
4
5
6
7
8
9
10
11
-- 부서별 가장 높은 연봉과 가장 낮은 연봉
-- 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
SELECT  DEPARTMENT_ID
        , MAX(SALARY)
        , MIN(SALARY)
        , SUM(SALARY)
        , ROUND(AVG(SALARY))
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
ORDER   BY DEPARTMENT_ID
;
cs

결과


NVL(COLUMN, 표시할값) null value 처리해주는 함수

GROUP BY는 NULL까지 포함한다.

조건에서 NULL을 뺄건지 말건지를 지정해주어야한다.

만약, NULL이 의미가 있다면 제외를 하면 안되겠지만, 'NULL이라고 보여주기 싫다면 ~~라고 처리해라' 라고 할 수 있는 함수가 있다.

그게 바로 NVL 이다.


예시1.

1
2
3
4
5
6
7
8
9
10
11
-- 부서별 가장 높은 연봉과 가장 낮은 연봉
-- 부서별 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
SELECT  NVL(DEPARTMENT_ID, 0)
        , MAX(SALARY)
        , MIN(SALARY)
        , SUM(SALARY)
        , ROUND(AVG(SALARY))
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
ORDER   BY DEPARTMENT_ID
;
cs



AS 별칭이름    별칭주기
그러나 오라클은 AS를 쓰는 것도 귀찮아하기 때문에 그냥 한칸 띄고 주고싶은 별칭을 적을수도 있다.


예시1.

1
2
3
4
5
6
7
8
9
10
11
-- 부서별 가장 높은 연봉과 가장 낮은 연봉
-- 부서별 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
SELECT  NVL(DEPARTMENT_ID, 0) AS DEPARTMENT_ID
        , MAX(SALARY) AS MAX_SALARY
        , MIN(SALARY) AS MIN_SALARY
        , SUM(SALARY) SUM_SALARY
        , ROUND(AVG(SALARY)) AVG_SALARY
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
ORDER   BY DEPARTMENT_ID
;
cs





HAVING    GROUP BY의 조건

SELECT [COLUMN], [COLUMN], [...]

FROM [TABLE]

WHERE [CONDITIONS]

GROUP BY [COLUMN], [COLUMN], [...]

HAVING [CONDITION]


예시1.

1
2
3
4
5
6
7
8
9
10
11
12
-- 부서별 가장 높은 연봉과 가장 낮은 연봉
-- 부서별 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
SELECT  NVL(DEPARTMENT_ID, 0) AS DEPARTMENT_ID
        , MAX(SALARY) AS MAX_SALARY
        , MIN(SALARY) AS MIN_SALARY
        , SUM(SALARY) SUM_SALARY
        , ROUND(AVG(SALARY)) AVG_SALARY
FROM    EMPLOYEES
GROUP   BY DEPARTMENT_ID
HAVING  AVG(SALARY) >= 5000
ORDER   BY DEPARTMENT_ID
;
cs

'프로그래밍 > 데이터베이스' 카테고리의 다른 글

~서브쿼리 실습문제  (1) 2016.02.17
서브 쿼리  (0) 2016.02.16
SELECT 쿼리  (0) 2016.02.15
Oracle 설치하기  (0) 2016.02.15
데이터베이스 모델링  (0) 2016.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함