[SQL] SQL GROUP BY - HAVING 정리하기

Sophie·2024년 11월 12일

SQL GROUP BY - HAVING

1. 기본 문법

SELECT * 
FROM TABLEA
GROUP BY COL1
HAVING COL2
  • 작성 방법

기본 문법은 위와 같이 SELECT - FROM - GROUP BY - HAVNING 의 순으로 작성한다.
데이터를 특정 조건에 따라 가져온다는 점에서는 WHERE 와 동일하지만, WHERE 와는 아래와 같은 차이점을 가진다.

  • WHERE 와 HAVING 의 차이점
    • WHERE : 개별 행에 대해 필터링
    • HAVING : 집계 값을 기준으로 행 그룹을 필터링
      *GROUP BY 와 세트로 함께 사용!
  • 예시
    • Customers 라는 테이블에서 국가별 고객 수를 조회한다면, GROUP BY - HAVNING 을 사용해볼 수 있다.

      *이미지 원본 링크 : programiz - sql having clause

2. HAVING 절에서 참조하는 컬럼

추가로 연습 문제를 풀다가 낸 오류 중에 HAVING 절에 특정 컬럼의 조건을 추가했는데, 해당 컬럼명이 인식되지 않는 경우가 있었다.

유사한 예시가 있어서 가져와봤다.

  • HAVING 절 참조 컬럼 오류 예시
SELECT pe.company, count(product_name) AS n_products, avg(carbon_footprint_pcf) AS avg_carbon_footprint_pcf
FROM product_emissions AS pe
WHERE industry_group = 'Technology Hardware & Equipment'
GROUP BY pe.company, industry_group
having avg_carbon_footprint_pcf>100
ORDER BY n_products

다른 구절들이 복잡해보이지만 SELECT 와 HAVING 절만 보면, SELECT 절에서 새로 생성한 별칭 컬럼 (avg_carbon_footprint_pcf) 을 HAVING 절에서는 인식하지 못하는 오류가 발생한다.

*예시 원본 링크 : datacamp - How to Use GROUP BY and HAVING in SQL

이를 원본 테이블에 컬럼명으로 바꾸어 작성하면 정상적으로 작동하는데, 이 내용 관련해서는 SQL 의 실행 순서를 이해해야한다.


3. SQL 실행순서

앞선 예시의 HAVING 절 컬럼이 먹히지 않았던 이유는 우리가 쿼리를 작성할 때 명령의 순서와 컴퓨터가 SQL 을 인식하고 실행하는 순서가 다르기 때문이다.

  • 쿼리 작성 순서
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
  • 컴퓨터의 SQL 실행 순서
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT

실행순서로는 HAVING 이 SELECT 보다 먼저 있기 때문에 SELECT 절에서 새롭게 규정한 별칭 (Alias) 컬럼명은 HAVING 절에서는 알 수가 없는 것이라고 한다.


[참고자료]

0개의 댓글