작성
·
266
0
top earners 문제를 풀다가
count(earnings)가 아닌 count(*)로 작성하는 점에
의문이 생겨 기존 질의 응답을 쭉 읽었습니다!
보다보니 쿼리 실행 순서 때문이라는 답글을 보았는데요.
이 문제 풀이에서 쿼리 실행 순서가
FROM -> GROUP BY -> SELECT -> ORDER BY -> LIMIT 순 이라고 하셨는데,
1) 그럼 group by 가 실행될 때 earnings는 아직 정의되지 않았지만 뒤의 select에서 정의가 되었기 때문에 오류없이 넘어가는 건가요?
2) group by 로 인해 earnings 칼럼 기준으로 정렬하기 때문에 count(*)을 쓰면 동일한 earnings끼리만 묶이는 원리(?)라고 이해하면 되나요?
답변 1
0
안녕하세요.
1) 실행 순서는 적어주신 순서가 일반적인 순서가 맞습니다. 그래서 몇 개 DB에서는 SELECT 에서 작성한 Alias 를 GROUP BY 에서 사용하실 수 없어요. 하지만 DB 마다 SELECT 절에서 사용한 Alias 를 GROUP BY 에서 사용할 수 있는지는 약간 다른데요. MySQL에서는 사용할 수 있습니다. SQL 이라는 공통의 규약이 있지만, 어떤 DBMS를 사용하느냐에 따라 기능의 차이가 약간 있다고 이해하시면 될 것 같아요.
관련된 이야기가 오간 stackoverflow 타래가 있어서 붙입니다. sql using select alias in group by 라고 구글에 검색해서 찾았어요.
https://stackoverflow.com/questions/3841295/sql-using-alias-in-group-by
2) 네 맞습니다!
좋은 질문 남겨주셔서 감사합니다.