[SQL] GROUP BY에서 SELECT Alias 사용

오형상·2024년 5월 11일
post-thumbnail

문제 상황

프로그래머스 가격대 별 상품 구하기를 풀다 의문점이 들었다.

내가 알기로는 SQL 실행 순서는 아래와 같았다.
FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY

그럼 아래의 코드에서 GROUP BY가 실행되는 시점에는 PRICE_GROUP이 존재하지 않을텐데 어떻게 정상 작동하는 걸까?

SELECT 
	TRUNCATE(PRICE,-4) AS PRICE_GROUP,
    COUNT(PRODUCT_ID) AS PRODUCTS
FROM
	PRODUCT
GROUP BY
	PRICE_GROUP
ORDER BY
	PRICE_GROUP

이유

GROUP BY가 SELECT 보다 먼저 실행 되지만, SELECT의 alias를 사용할 수 있다. (MySQL 기준 DBMS가 알아서 해준다.)
따라서 GROUP BY, HAVING, ORDER BY에서 SELECT의 alias를 사용할 수 있다.
(단, 표준 SQL에서는 지원하지 않는다.)
WHERE절에서는 SELECT의 alias를 사용할 수 없다. 실제 컬럼명만 사용가능하다.

0개의 댓글