-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
해결됨
해커랭크 Top Earners 문제 답답합니다 ㅜㅜ
22.05.12 22:06 작성 조회수 242
2
변수 명명이 헷깔립니다.
1.
WHERE절에 서브쿼리를 할때
SELECT months*salary , count(*)
FROM Employee
WHERE months*salary = (SELECT MAX(months *salary) FROM Employee)
GROUP BY months*salary
이렇게 months*salary를 따로 명명해주지 않아도 잘 돌아갑니다.
그런데
SELECT months*salary AS earnings, count(*)
FROM Employee
WHERE earnings = (SELECT MAX(months *salary) FROM Employee)
GROUP BY earnings
이런식으로 WHERE과 GROUP BY에 earnings라고 명명한 변수를 쓰면 에러가 납니다. 그 이유를 모르겠습니다.
2. 그런데 HAVING 절에 서브쿼리를 쓰는 경우는 이와 반대가 됩니다.
SELECT months*salary AS earnings, count(*)
FROM Employee
GROUP BY earnings
HAVING earnings = (SELECT MAX(months*salary) FROM Employee)
이렇게 GROUP BY와 HAVING에 earnings라고 명명한 변수를 주면 잘 돌아갑니다.
그런데
SELECT months*salary , count(*)
FROM Employee
GROUP BY months*salary
HAVING months*salary = (SELECT MAX(months*salary) FROM Employee)
이렇게 이름을 따로 명명해주지 않으면 안돌아갑니다.
명명부분이 너무 어렵습니다ㅜㅜ 도와주세요
답변을 작성해보세요.
0
0
송혜정
지식공유자2022.05.13
안녕하세요, 답변 드립니다.
우선 MySQL 에서는 GROUP BY, HAVING, ORDER BY 절에서 Alias 를 사용하실 수 있고 WHERE 절에서는 사용하실 수 없습니다. WHERE 절에서 사용할 수 없는 이유는 쿼리 실행 순서와 관련이 있는데요, WHERE 절이 실행된 이후에 SELECT 절이 실행되기 때문에 SELECT 절에서 정의한 Alias는 WHERE 절에서 사용할 수 없습니다.
MySQL에서는 SQL 표준 문법과 다르게, HAVING 절이 FROM (JOIN), WHERE, GROUP BY, SELECT 이후에 실행됩니다. 따라서 HAVING 절에서는 SELECT 절에서 정의한 Alias를 사용해주셔야 합니다.
참고 하실 문서를 첨부하였으니 이해에 도움이 되길 바라겠습니다 :)
답변 3