본문 바로가기

공부 자료/DataBase

[SQL] 그룹화 GROUP BY

GROUP BY

1. 칼럼 그룹화

SELECT 칼럼명 FROM [테이블명] GROUP BY 그룹화 할 칼럼명(alias로 지정한 별칭도 사용 가능);
-- emp 테이블의 deptno 별로 칼럼 출력
SELECT deptno, COUNT(*), SUM(sal) FROM emp GROUP BY deptno;

-- emp 테이블에서 deptno, job을 그룹화
SELECT deptno, job, COUNT(*), SUM(sal) FROM emp GROUP BY deptno, job;

-- student 테이블에서 메인 학과별 학생 수 조회
SELECT deptno1, COUNT(*) FROM student GROUP BY deptno1;

-- student 테이블에서 학년별 평균 키 조회
SELECT grade, format(AVG(height),1) FROM student GROUP BY grade;

 

 

2. 조건 처리 후 칼럼 그룹화

SELECT 칼럼명 FROM [테이블명]  WHERE 조건식 GROUP BY 그룹화 할 칼럼명;

 

 

3. 칼럼 그룹화 후 조건 처리

SELECT 칼럼명 FROM [테이블명] GROUP BY 그룹화 할 칼럼명 HAVING 조건;
-- emp 테이블에서 deptno 별 sal의 평균 중 평균이 2000 이상인것만 출력
SELECT deptno, avg(sal) FROM emp GROUP BY deptno HAVING AVG(sal) >=2000;

 

 

4. 조건 처리 후 칼럼 그룹화 한 후 조건 처리

SELECT 칼럼명 FROM [테이블명] WHERE 조건절 GROUP BY 그룹화 할 칼럼명 HAVING 조건;

 

 

5. ORDER BY가 존재하는 경우

SELECT 컬럼 FROM 테이블 [WHERE 조건식]
GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];
-- student 테이블에서 각 학과와 학년별 평균 몸무게가 50 이상이고, 최대/최소 몸무게를 조회 후 정렬
SELECT deptno1, grade, COUNT(*), format(AVG(weight),1), MIN(weight), MAX(weight) 
FROM student 
GROUP BY deptno1, grade 
HAVING AVG(weight) > 50 
ORDER BY deptno1, grade;