프로그래머스 가격대 별 상품 구하기를 풀다 의문점이 들었다.
내가 알기로는 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를 사용할 수 없다. 실제 컬럼명만 사용가능하다.