작성
·
229
1
강의 잘듣고있습니다. 너무 유익해요 ㅠㅠ
다름이 아니라 oracle에서는 alias가 서브쿼리없이는 조건절에 사용할 수 없는것 같은데 그러면 아래 코드처럼
SELECT A.*
FROM (
SELECT SALARY * MONTHS AS EARNINGS
,COUNT(*)
FROM EMPLOYEE
GROUP BY SALARY * MONTHS
ORDER BY SALARY * MONTHS DESC
) A
WHERE ROWNUM = 1
salary * months 를 반복해서 3번이나 적어줘야 되더라고요 너무 비효율적인거같아서 서브쿼리?안에서 alias만들어서 alias를 바깥에서 사용하는 방법을 찾아봤는데 정렬도 꼬이고 값이 이상해져서 사용방법을 잘 모르겠어요..
오라클도 mysql처럼 alias를 조건절에 사용할 수 있는 방법이 있을까요?
답변 1
1
안녕하세요 sql 욜라어려움님
명령어 실행 순서 때문에 SELECT의 alias를 GROUP BY에서 사용하지 못하는 것으로 확인 되는데요.
사실 이 부분은 MySQL에서도 확인할 수 있는 문제 입니다. 해커랭크 경우 인터프리터의 특이성으로 인해 SELECT에서 사용한 alias가 GROUP BY 구문에서도 사용이 가능한 것으로 보이나 통상적인 쿼리구문의 실행순서는 GROUP BY의 조건이 모두 연산 된 후 SELECT 구문이 실행되므로 select에서 사용한 alias는 GROUP BY에서 사용할 수 없는 것이 맞습니다. 강의 제작시 미처 확인하지 못하여 혼란을 드린 것 같네요.
때문에 oracle에서 작성하신 쿼리는 잘 작성된 것으로 보이며,
salary * months를 세번 적어주시는 것을 피하는 방법으로는 아래와 같이 서브쿼리를 한번 더 사용하시는 방법이 있으니 참고하시면 좋을 것 같습니다 :)
SELECT *
FROM (SELECT earnings
,COUNT(*)
FROM (SELECT salary * months AS earnings FROM employee)
GROUP BY earnings
ORDER BY earnings DESC)
WHERE rownum = 1;
감사합니다