SQL

[MYSQL] SQL의 논리적 실행 순서 예외(GROUP BY, HAVING)

silver-w 2025. 7. 1. 17:38

 

□ 일반적으로 SQL에서 논리적 실행 순서는 아래와 같다.

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. 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