group by 절에서 테이블 필드명과 Alias가 동일할 때 3

by 오리온 [MySQL] [2024.01.02 17:44:14]


안녕하세요 선배님!

저는 주니어 개발자입니다.

MySQL로 실무를 하면서 궁금한 점이 있어서 질문 드립니다.

예를 들어

SELECT CONCAT(month, day) AS day
       , count(*) AS visit_count
FROM visitor
WHERE day > 29 and id != ''
GROUP BY id, day

이렇게 쿼리가 작성되어있을 때

Group by 절에 있는 day는 visitor 테이블에 있는 day 필드를 가리키는 건가요? select 절에 alias로 선언된 day인가요?

구글링을 해봐도 안나오네요...
chat gpt에 물어볼 때는 select절에 alias 선언된게 우선이라고 하는데
정확한 답인지도 모르겠네요....

by pajama [2024.01.02 18:16:51]

문서상에 나온 것은 찾기가 어려운가 본데요.. 답은 대체로 같네요. alias가 우선된다고 합니다.

https://stackoverflow.com/questions/40361333/is-ordering-done-by-actual-column-or-alias

수정이 가능하다면 alias를 컬럼명과 다르게 하는 것이 명확하고 좋겠네요.


by 오리온 [2024.01.02 19:13:57]

와 감사합니다!
저는 계속 mysql alias duplicate table column name in group by 
이런식으로 검색했을땐 원하는 내용이 안나왔었는데

이렇게 제가 원하는 질문 찾아서 답변주셔서 감사합니다!
검색하는 것도 능력이라고 느껴지네요 ㅎㅎ


by 마농 [2024.01.02 21:04:52]

일반적인 표준 그룹바이 구문에서는
- where 절에서는 컬럼명
- group by 절에서도 컬럼명
- order by by 절에서는 별칭 우선 입니다.
MySQL 에서는 표준을 따르지 않습니다.
- MySQL 에서는 Group By 절에서?별칭을 직접 인식하는 듯 합니다.?(표준에서 허용되지 않는 구문)
- 심지어 Group by 1, 2 와 같은 구문도 가능합니다. (표준에서 허용되지 않는 구문)
될 수 있으면 표준을 따르려고 노력하면서
- MySQL 만의 차이점을 인지하고 상황에 맞게 대처하는 것이 좋을 둣 합니다.
- 표준 구문을 정확히게 인지하면서 MySQL 만의 고유한 특성을 이해하셔야 합니다.


by 오리온 [2024.01.03 10:03:55]

선배님 답변 감사합니다!
아직 주니어 개발자지만 이렇게 하나하나 알아가게 되어서 너무 기쁘네요

많은 도움 되었습니다. 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입