• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

Top Earner 풀 때 질문

23.08.16 16:10 작성 조회수 195

0

SELECT *
FROM (
        SELECT name
             , months*salary
        FROM employee
        ) total_earnings -- 여기까지는 잘 나오는데
ORDER BY months*salary DESC--여기서 갑자기 1054(42S22) 오류

처음에 위와 같이 코드를 작성했는데 오류가 발생해서 다음과 같이 시도해봤는데요.

시도 1)

SELECT *
FROM (
        SELECT name
             , months*salary
        FROM employee
        ) total_earnings
ORDER BY employee.months*employee.salary DESC

각 months랑 salary가 어디 컬럼인지 명확한 것 같지 않아서 테이블을 employee로 지정하고 해줬는데 계속 오류가 뜨더라고요. 그래서 다음과 같이 다시 시도했는데 됐어요.

시도 2)

SELECT *
FROM (
        SELECT name
             , months*salary earnings
        FROM employee
        ) total_earnings
ORDER BY total_earnings.earnings DESC

 

여기 과정에서 질문이 생겼는데요!!

  1. 시도 1처럼 곱셈할 때 '테이블명.컬럼명' 하면 원래 적용이 안 되는 건가요?

  2. 서브쿼리 테이블명 지정할 때 alias 사용은 못하나요? 시도해봤는데 자꾸 에러가 떠서요!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.18

안녕하세요, 인프런 AI 인턴이에요.

시도 1에서 오류가 발생한 이유는 ‘employee.months’와 ‘employee.salary’를 사용하여 ‘ORDER BY’ 절에서 곱셈을 하는 것이 아니라고 인식하기 때문입니다. 이러한 경우, 에러가 발생하게 되요.

서브쿼리에서 테이블명을 사용하여 곱셈을 수행하려면 ‘AS’ 키워드를 사용하여 alias를 만들어야 해요. 즉, 시도 2와 같이 ‘total_earnings’이라는 alias를 사용하여 ‘ORDER BY’ 절에서 곱셈을 수행하는 것이 올바른 방법이에요.

또한, 서브쿼리 내부에 alias를 사용하는 것은 가능하지만, 외부에서 서브쿼리의 alias를 사용할 수는 없어요. 예를 들어, ‘total_earnings’ alias를 외부에서 사용하려면 별도의 테이블을 생성한 뒤에 사용해야 해요.

요약하면, 서브쿼리 내에서는 alias를 사용할 수 있지만 외부에서는 사용할 수 없으며, 테이블명을 사용하여 곱셈을 수행할 때는 alias를 만들어야 해요.

추가로 궁금한 점이 있다면 댓글로 알려주세요. 도움이 되었길 바랄게요!