본문 바로가기

DB

[SQLD] GROUP BY. 개체수준에서 그룹수준으로 데이터 묶기

반응형

GROUP BY

1. GROUP BY 절은 데이터들을 원하는 그룹으로 나눌 수 있다. 

2. 개체 수준의 데이터를 그룹 수준으로 만들 수 있다.

3. 예제 - EMP 테이블에서 부서번호, 사원수를 조회하고 부서번호 별로 묶어라. 

SELECT DEPTNO, COUNT(EMPNO)
FROM EMP
GROUP BY DEPTNO;

 

집계함수는 WHERE 절에 사용불가 

1. SQL 연산 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 

2. 집계함수는 WHERE 절에 올 수 없다. GROUP BY 절보다 WHERE절이 먼저 수행되기 때문이다. 

3. 예제 

-- 각 부서별 사원들의 급여 평균을 구하라
SELECT DEPTNO, AVG(SAL) 
FROM EMP
GROUP BY DEPTNO;

-- 각 직무별 사원들의 급여 총합을 구하라
SELECT JOB, SUM(SAL) 
FROM EMP
GROUP BY JOB;

-- 1500이상 급여를 받는 사원들의 부서별 급여 평균을 구해라. 
SELECT DECODE(DEPTNO, 10, '인사과', 20, '영업과', 30, '생산과'), AVG(SAL)
FROM EMP
WHERE SAL >= 1500
GROUP BY DEPTNO;

-- 각 직장 상사별 사원들의 총 수를 구하라. 
SELECT MGR, COUNT(EMPNO)
FROM EMP
GROUP BY MGR;

 

예제 마지막 문제에서 MGR이 뜻하는 것은 '관리자'다. MANAGER라고 이해하자. 

 

 

집계함수 ORDER BY에 사용 가능

1. 앞에 나온 SQL 연산 순서에 의해 ORDER BY는 마지막에 연산된다. 집계함수 사용 가능하다. 

2. 예제 

-- EMP에서 부서 별로 그룹화 하고, 각 부서별 최대 사원 급여를 기준 오름차순 정렬
SELECT DEPTNO, MAX(SAL)
FROM EMP
GROUP BY DEPTNO
ORDER BY MAX(SAL) ASC;

 

GROUP BY에서 NULL 사용 가능

1. NULL도 하나의 그룹으로 인식하여 구분된다. 

2. 예제 

-- EMP에서 커미션 별로 그룹화 
SELECT COMM, COUNT(*)
FROM EMP
GROUP BY COMM;

SELECT COMM, COUNT(*) FROM EMP GROUP BY COMM;
COMM이 NULL인 사람들은 10명이다.

 

GROUP BY에서 두 개 이상의 컬럼을 작성하는 경우 

1. 두 개 이상의 컬럼을 작성할 수 있다. 두 조건에 맞는 결과가 나온다. 

2. 예제 

SELECT DEPTNO, ENAME, SUM(SAL)
FROM EMP
GROUP BY DEPTNO, ENAME;

 

반응형