• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

쿼리 실행 순서

20.05.14 20:42 작성 조회수 100

5

안녕하세요. top earners에 대해 질문이 있습니다.

코드가

select months*salary as earning, count(*)

from employee

group by earning

order by earning desc

limit 1

로 되어 있는데요.

제가 알기로는 쿼리 실행 순서가 group by -> select 인 걸로 아는데. 어떻게 group by가 earning에 걸릴 수 있는 지 모르겠습니다.ㅜㅜ

저는 from에 서브쿼리로 earning이 있는 table을 만들어서 실행했는데요. 위의 코드가 돌아가는 걸 보고 깜짝 놀랐습니다.

( *제가 쓴 코드입니다.

select earning, count(*)

from (select months*salary as earning 

      from employee) as new_table

group by earning

order by earning desc

limit 1)

이해를 해야 다음에 같은 문제가 나왔을 때 해결할 수 있을것 같아 질문 드립니다. 답변 부탁드리겠습니다.

답변 2

·

답변을 작성해보세요.

1

안녕하세요 Kang MJ님,

시간이 많이 지났지만 이전 답변에서 설명이 충분치 못했던 것 같아, 관련 된 내용을 설명하고 있는 MySQL 공식 레퍼런스와 stackoverflow 문답을 첨부드립니다. 도움이 되셨길 바랍니다 :)

Problems with Column Aliases

SQL - using alias in Group By_Stackoverflow

1

안녕하세요 Kang MJ님 답변이 늦어져서 죄송합니다.

말씀하신 대로 일반적으로 GROUP BY가 SELECT구문보다 먼저 실행되므로 서브쿼리를 이용하시는 것이 맞습니다.

해당 사안은 해커랭크에서 사용하는 SQL 인터프리터의 특이성 때문에 발생하는 예외 현상으로 보여지는데요. 정확한 답변 드리기 위해 여러가지 경우를 찾아보았으나 뚜렸하게 해당 사안에 대해 설명이 가능한 레퍼런스를 찾지 못하였습니다.

참고 부탁드리고, 다시 한번 답변이 너무 늦어진 점 사과드리며 좋은 질문 남겨주셔서 감사합니다 :)