GROUP BY
- GROUP BY절은 변수 안의 값들을 묶어 주기 위한 작업 !
- 전체 데이터를 기준으로 조회할 때는 GROUP BY 절이 필요하지 않지만, (When?)특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을 때 주로 사용합니다.
SQL 작성방법
1. SELECT 절에 기준컬럼(범주형변수, Categorical Variable) 작성
2. 집계함수(COUNT, MAX, MIN, AVG, SUM) 작성 *집계함수 : 어떤 수를 모아서 어떤 값을 계산하는 것
3. WHERE절 이후 GROUP BY 기준컬럼(그룹으로 묶어줄 변수) 작성 (WHERE 절은 생략이 가능하다.)
*SQL의 작동순서 : FROM -> ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY
HAVING <> WHERE
Having 절은 GROUP BY 에 의한(그룹으로 묶인)결과를 필터링 할 때(결과에 조건을 줄 때) 사용됩니다.
GROUP BY 절 뒤에 위치합니다.
WHERE절과 차이점은 WHERE절은 GROUP BY전 데이터를 기준으로 필터링을 한다면, HAVING 절은 GROUP BY 후 결과값을 기준으로 데이터를 필터링한다.
날짜 | 이름 | 성별 | 나이 | 직업 |
2024-01-02 | 용스 | M | 20 | 대학생 |
2024-01-03 | 혁스 | F | 21 | 대학생 |
동스 | M | 40 | 선생님 | |
맘스 | F | 45 | 선생님 |
GROUP BY 직업을 해주게 되면 눈에 보이지는 않지만 대학생들끼리 일단 묶이고 선생님들끼리 묶입니다. 즉, 범주별로 일단 동그라미가 그려진다고 생각하면 됩니다.
직업 | 이름 | 성별 | 나이 | |
대학생 | 용스 | M | 20 | |
대학생 | 혁스 | F | 21 | |
선생님 | 동스 | M | 40 | |
선생님 | 맘스 | F | 45 |
SELECT AVG(나이) 를 해주면 대학생의 나이 평균 20.5가 나오겠죠? 그리고 선생님의 평균 나이 42.5가 반환되어
직업 | AVG(나이) | |||
대학생 | 20.5 | |||
선생님 | 42.5 |
여기서 HAVING 을 추가해서 AVG(나이) < 30 해주면 어떻게 될까요?
직업 | AVG(나이) |
대학생 | 20.5 |
맞습니다. 이렇게 GROUP BY로 묶여서 반환된 값(범주(카테고리)별 수치값) 에 필터링(조건)에 맞는 (TRUE) 한 것들만 선택되어 반환이 되는 겁니다.
즉, GROUP BY 와 HAVING 은 묶고 정제(처리, 필터링) 해주는 작업이라고 생각하시면 됩니다.
SQL 이라는 것은 항상 데이터 베이스(테이블로 저장된 형태)에서 내가 필요한 데이터를 원하는 형태로 가져오는 것이기 때문에 이렇게 GROUP BY , HAVING 과 같은 묶어주고 필터링(걸러주는,..?)해주는 작업이 많습니다. 제가 최대한 쉽게 풀어 쓴 것이기 때문에 전문적인 용어가 아니더라도 양해해주시고 읽어주세요 !!
May this information be a fair exchange for your time.

'Programming > SQL' 카테고리의 다른 글
[TIL 0628] 루시와 엘라 못 찾을 뻔한 썰 (0) | 2024.06.28 |
---|---|
[TIL 0627] SUBQUERY (스칼라 서브쿼리) (0) | 2024.06.27 |
[TIL 0626][SQL] MySQL 쿼리를 작성할 때 따옴표를 붙여줘야 하는 경우 (0) | 2024.06.26 |
[프로그래머스 SQL] 동명 동물 수 찾기 (0) | 2024.06.26 |
[프로그래머스 SQL] 문제풀이 (정렬, 중복제거) (0) | 2024.06.25 |