본문 바로가기
Programming/SQL

[TIL 0626] GROUP BY 와 HAVING

by 용스토리랜드 2024. 6. 26.

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.

created by chatgpt

반응형