GROUP BY
- 데이터를 특정 기준으로 묶어서(GROUP) 집계함수와 함께 사용하는 구문
- 예시로는 학교별 학생수, 과목별 최고 점수, 부서별 평균 급여 등등
- 사용시 주의사항은 SELECT문에 있는 컬럼은 GROUP BY절에 있거나 집계함수로 감싸야함
- GROUP BY 없이 집계함수를 사용할 경우 전체 집계만 가능하다.
자주 쓰이는 집계함수
함수 | 설명 |
COUNT() | 개수 |
SUM() | 합계 |
AVG() | 평균 |
MAX() | 최대값 |
MIN() | 최소값 |
문법
SELECT 그룹컬럼, 집계함수(컬럼)
FROM 테이블
GROUP BY 그룹컬럼;
예시)
학교별 학생이 몇명인지 알고 싶다.
- 예상데이터 = 혜화초등학교: 2명 / 효제초등학교 1명 / 사대초등학교 1명 / 강북초등학교 1명 / 미아초등학교 0명
결과
쿼리문
SELECT
SC.SCHOOL_SEQ AS SCHOOL_SEQ,
SC.SCHOOL_NAME AS 학교,
COUNT(ST.STUDENT_SEQ) AS 학생수
FROM SCHOOL SC LEFT JOIN STUDENT ST
ON SC.SCHOOL_SEQ = ST.STUDENT_SCHOOL
GROUP BY SC.SCHOOL_NAME, SC.SCHOOL_SEQ
ORDER BY SC.SCHOOL_SEQ ASC;
- 참고로 SELECT 절이나 GROUP BY 절에 컬럼이 없으면 ORDER BY 가 안된다.
HAVING
- GROUP BY로 묶은 그룹에 조건을 걸 때 사용
- GROUP BY와 세트라고 보면됨
- WHERE 조건은 행 조건이고 HAVING은 그룹에 대한 조건
- 집계함수의 결과에 조건을 걸고 싶을 때 사용
문법
SELECT 그룹기준컬럼, 집계함수(컬럼)
FROM 테이블명
GROUP BY 그룹기준컬럼
HAVING 집계함수(컬럼) 조건;
예시)
과목 평균 점수가 70점 이상만 보고 싶다.
- 여기까진 위에서 알아본 GROUP BY를 활용한 집계 데이터를 추출했다.
- HAVING을 사용해 평균 점수가 70점 이상인 데이터를 뽑을려고한다.
- 예상되는 데이터는 수학을 제외한 국어, 과학이 나와야 한다.
결과
쿼리문
SELECT
SC.SUBJECT AS 과목,
AVG(SC.SCORE) 평균
FROM SCORE SC LEFT JOIN STUDENT ST
ON SC.STUDENT_SEQ = ST.STUDENT_SEQ
GROUP BY SC.SUBJECT
HAVING AVG(SC.SCORE) >= 70;
- 평균 점수가 조건이기 때문에 HAVING에 AVG 집계함수를 사용해 조건을 걸었다.
반응형
'DataBase' 카테고리의 다른 글
[DATABASE] 서브쿼리 (0) | 2025.05.12 |
---|---|
[DATABASE] ORDER BY / LIMIT / OFFSET (0) | 2025.05.11 |
[DATABASE] 조인(JOIN)의 개념과 종류 (0) | 2025.05.06 |
[DATABASE] 데이터베이스 언어와 SQL (0) | 2025.04.29 |
[DATABASE] 제약조건 (0) | 2025.04.29 |