SQL 문제

문제 24. 카테고리 별 상품 개수 구하기(난이도 10)(SQL 구문 실행 순서)

kagan-draca 2024. 7. 12. 17:10

 

문제를 보고 어떻게 풀어야 하는지 전혀 감이 오지 않았다...

CASE를 쓴다치고

SUBSTRING(PRODUCT_CODE,1,2) 으로 '상품 카테고리 코드' 만을 뽑아낸다 쳤을 때

상품 카테고리에 A1, A2, A3, ... , An 까지 카테고리가 존재한다면

WHEN A1부터 An까지 모두 작성해야 하는 문제가 발생하게 된다.

 

그래서 먼저 정답부터 확인한 결과 

 

SELECT 
SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY ASC

 

나에게 SQL문의 실행 순서가 어떻게 되는지 알아보게 만드는 계기가 됐다.

이유로는 SELECT 문의 CATEGORY가 먼저 실행돼서 GROUP BY에서 CATEGORY로

그룹을 만든건지, GROUP BY으로 CATEGORY라는 속성을 새로 만들어 SELECT 문에서

CATEGOY라는 속성을 사용할 수 있게 해준건지 의문이 들었기 때문이다.

 

찾아보기 이전에는, SELECT문에서 AS로 CATEGORY라는 속성의 이름을 재정의해주었기 때문에

GROUP BY와 ORDER BY에서 CATEGORY를 사용할 수 있는 것인줄 알았다.

 

찾아본 결과, 

 

내 생각과는 달리 GROUP BY가  먼저 실행돼 CATEGORY라는 속성의 이름으로 구룹을 만들어주었고 이후 SELECT 문에서 SUBSTRING(PRODUCT_CODE, 1, 2)이 AS로 "CATEGORY"라는 속성을 알려주는 것 같았다.

 

이유로는 SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY에서 AS CATEGORY를 지울 경우 

 

Unknown column 'CATEGORY' in 'group statement'

 

라는 오류 메시지가 출력 돼는 것을 보았기 때문이다.

 

아직 정확하게 SQL문의 실행 순서가 어떻게 되는지 분간이 잘 안 되지만, 위의 그림을 보고 SQL 문의 알고리즘을 짜기 시작하면 보다 쉽고 정확한 결과를 도출해낼 수 있을거라는 생각이 들었다.