Skip to main content

[SQL] GROUP BY, ORDER BY절에서 테이블 별칭 생략 가능한 경우


[SQL] 프로그래머스 - 물고기 종류 별 잡은 수 구하기

SELECT COUNT(*) AS FISH_COUNT, n. FISH_NAME
FROM fish_info i JOIN fish_name_info n ON i.fish_type = n.fish_type
GROUP BY fish_name
ORDER BY fish_count DESC; 

MySQL에서는 GROUP BYORDER BY에서 컬럼명이 모호하지 않으면 테이블 이름이나 별칭 생략이 가능하다. 위 쿼리에서 fish_name 컬럼이 fish_infofish_name_info 두 테이블 중 하나에만 존재하면 MySQL은 자동으로 그 테이블의 컬럼으로 인식한다. 만약 두 테이블에 같은 이름의 컬럼이 있으면 모호하다(ambiguous)고 에러가 나기 때문에, 그때는 n.fish_name처럼 테이블 명이나 별칭을 꼭 붙여야 한다.


GROUP BY와 ORDER BY에서 테이블명 별칭이 생략이 가능한 경우

상황

컬럼 출처

별칭 생략가능 여부

이유

1

해당 컬럼이 하나의 테이블에만 존재

✅ 가능

모호하지 않아서 MySQL이 자동 인식

2

컬럼이 여러 테이블에 같은 이름으로 존재

❌ 불가능

어떤 테이블의 컬럼인지 모호해서 ambiguous column

에러 발생

3

SELECT 절에서 만든 별칭(alias)

✅ 가능

SQL 표준에서 ORDER BY에서는 별칭 사용 가능
(단, GROUP BY에서는 별칭 대부분 불가)

4

SELECT 절에서 사용한 함수나 표현식

ORDER BY에서는 가능 /

GROUP BY에서는 불가

GROUP BY는 실제 컬럼명을 요구하는 경우가 많음

5

*(전체 컬럼) 사용 시

❌ 불가능

컬럼 지정이 안 되어 있으므로 참조 불가

6

서브쿼리의 결과 컬럼

✅ 가능

서브쿼리의 결과셋에서 컬럼명이 유일하면 그대로 참조 가능