WHERE절 ALIAS와 서브쿼리 관련 질문 드립니다
많은 질문에 꼼꼼히 답변해주셔서 감사합니다:) 설명해주신 내용과 사이트를 읽고 아래처럼 이해했는데, 혹시 잘못 이해한 부분이 있을까요? -------------------------------------------------------------------------- [ALIAS에 관해 이해한 내용] ALIAS는 컬럼 ALIAS와 테이블 ALIAS, 2종류가 있다. 컬럼 ALIAS는 주로 SELECT절에서 사용된다. -GROUP BY, HAVING, ORDER BY절에서 사용할 수 있다 -WHERE절에서 사용할 수 없다 테이블 ALIAS는 주로 FROM절 서브쿼리나 JOIN할 때 사용된다. -(질문 내용에 있는) dr은 FROM절 서브쿼리에서 컬럼 ALIAS를 준 것은 맞다. 그러나 WHERE절에서 dr을 불러온 것은, 컬럼 ALIAS를 불러온 것이 아니라, 서브쿼리 테이블의 컬럼 자체를 불러온 것이므로, 사용 가능하다. ----------------------------------------------------------------------------------- 추가로 사이트를 읽다 더 궁금한 점이 생겨서 질문 드립니다! [질문: WHERE절에서 ALIAS를 못 쓰는 이유] WHERE절에서 ALIAS 못 쓰는 이유는 MYSQL에서 WHERE절 처리할 시점에는, SELECT절에서 정한 컬럼 값이 아직 계산이 안 됐기 때문입니다. (The reason is that when MySQL evaluates the WHERE clause, the values of columns specified in the SELECT clause is not be evaluated yet.) 그렇다면, 마찬가지로 SELECT절 실행 전에 처리하는 GROUP BY랑 HAVING에서도 ALIAS를 쓸 수 없어야하는거 아닌가..하는 생각이 들었습니다. 왜 WHERE절에서만 안되는지 궁금합니다! *제가 이해한 쿼리 실행 순서: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY --------------------------------------------------------------------------------------------- 그리고 3번 질문 해커랭크 Top Earners은 SQL중급/고급 강의에서 둘 다에서 다루는 문제 같은데요! 말씀해주신대로 MAX 활용 풀이에 관한 질문은 중급으로 옮겼습니다ㅎㅎ 같은 문제를 서브쿼리 활용해서 풀어보다(고급> 서브쿼리 해커랭크문제풀이 5:30부터) 궁금한 점이 생겨서 여기에 질문드립니다. HAVING 활용해서 풀어봤을 때, COUNT(employee_id)를 하면 에러가 나는 이유가 뭘까요? -정답 SELECT salary * months AS earnings , COUNT(*) FROM employee GROUP BY earnings HAVING earnings = (SELECT MAX(salary*months) FROM employee) -오답 ERROR 1054 (42S22) at line 1: Unknown column 'months' in 'having clause' SELECT months * salary AS earnings , COUNT(employee_id) FROM Employee GROUP BY earnings HAVING months * salary = (SELECT MAX(months*salary) FROM Employee) ----------------------------------------------------------------------------- 답변주신 덕분에 sql을 조금씩 더 이해하고 있습니다. 감사합니다ㅎㅎ!!