□ 일반적으로 SQL에서 논리적 실행 순서는 아래와 같다.
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
- LIMIT
□ 다만, 최적화와 구현상 처리를 위해 예외를 둔 경우가 있음.
B.3.4.4 Problems with Column Aliases
An alias can be used in a query select list to give a column a different name. You can use the alias in
GROUP BY, ORDER BY, or HAVING clauses to refer to the column:
※ 예외가 있다고 하더라도 여전히 where 절에서는 select의 alias가 계산되지 않기때문에 위 예외가 적용되지 않는다.
...
Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined.
[예시] - 프로그래머스 자동차 평균 대여 기간 구하기
SELECT CAR_ID
, round(AVG(DATEDIFF(end_date, start_date) + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id
HAVING AVERAGE_DURATION >= 7 -- select 절의 alias 사용 가능
ORDER BY 2 DESC, 1 DESC;
출처 : MYSQL Reference
MySQL :: MySQL 8.4 Reference Manual :: B.3.4.4 Problems with Column Aliases
B.3.4.4 Problems with Column Aliases An alias can be used in a query select list to give a column a different name. You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column: SELECT SQRT(a*b) AS root FROM tbl_name GROUP BY root
dev.mysql.com
'SQL' 카테고리의 다른 글
GROUP BY 후 조건 개수 세기: SUM() vs COUNT() 어떤 걸 써야 할까? (0) | 2025.07.03 |
---|---|
[MYSQL] 날짜를 계산하는 주요 함수 (0) | 2025.07.01 |
[EXIST/ NOT EXIST] 추출된 행 유무 결과가 필요할 때 (1) | 2025.05.22 |
Group by시 그룹화 대상이 아닌 컬럼 가지고 오기 (1) | 2025.05.15 |
CTE 사용법과 재귀함수 (0) | 2025.05.12 |