SQL을 쓰다 보면 컬럼 alias를 WHERE절에서 쓰려다 에러가 나는 경우가 있습니다.
그런데 ORDER BY절에서는 alias를 쓸 수 있죠.
왜 이런 차이가 생길까요?
SELECT 절에서 계산식이나 컬럼에 붙이는 별칭👉🏻 핵심 원인 : SQL의 실행 순서
우리가 작성하는 순서(SELECT → WHERE → ORDER BY)와 실제 실행 순서는 다릅니다.
1. FROM (테이블 읽기)
2. WHERE (행 필터링)
3. GROUP BY / HAVING
4. SELECT (컬럼 계산 + alias 생성)
5. ORDER BY
6. LIMIT
👉🏻 WHERE절은 alias 생성 이전에 실행 → alias를 모름
👉🏻 ORDER BY절은 alias 생성 이후 실행 → alias 사용 가능
-- ❌ WHERE절에서 alias 사용 → 에러 발생
SELECT price * quantity AS total_price
FROM orders
WHERE total_price > 100;
-- ✅ ORDER BY에서는 정상 작동
SELECT price * quantity AS total_price
FROM orders
ORDER BY total_price DESC;
WHERE price * quantity > 100
WITH sub AS (
SELECT price * quantity AS total_price
FROM orders
)
SELECT total_price
FROM sub
WHERE total_price > 100;
👉🏻 긴 식이나 반복적으로 쓰일 때 특히 유용합니다.