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

추가로 연습 문제를 풀다가 낸 오류 중에 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 의 실행 순서를 이해해야한다.
앞선 예시의 HAVING 절 컬럼이 먹히지 않았던 이유는 우리가 쿼리를 작성할 때 명령의 순서와 컴퓨터가 SQL 을 인식하고 실행하는 순서가 다르기 때문이다.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
실행순서로는 HAVING 이 SELECT 보다 먼저 있기 때문에 SELECT 절에서 새롭게 규정한 별칭 (Alias) 컬럼명은 HAVING 절에서는 알 수가 없는 것이라고 한다.