본문 바로가기

프로그래밍/MSSQL

[MSSQL] SELECT DISTINCT가 지정된 경우에는 ORDER BY 항목이 SELECT 목록에 나타나야 합니다.

반응형

 

 

SELECT DISTINCT ORDER BY 절 사용해서 원하는 결과를 뽑아내 보자

 

 

초기 데이터

 

위와 같이 이름과 나이 필드로 구성된 테이블이 있다.

 

 

[목표]

 

이름 필드의 값에서 중복을 제거하고 결과를 뽑아내려고 한다. 단, 이때 정렬 기준은 나이순으로 한다.

 

SELECT DISTINCT [name]
FROM TABLE_A

 

결과 데이터

 

중복이 제거된 결과가 나왔지만.. 정렬이 나이 순서가 아닌 이름 순서로 되어있다.

 

SELECT DISTINCT [name]
FROM TABLE_A
ORDER BY [age] ASC

 

정렬을 위해 ORDER BY 절을 추가해봤는데 다음과 같은 오류 메시지를 뱉어냈다.

 

오류 메시지

 

SELECT DISTINCT가 지정된 경우에는 ORDER BY 항목이 SELECT 목록에 나타나야 합니다.

 

하지만 ORDER BY 항목이 SELECT 절에 추가하게 된다면, 이름값의 중복 제거가 정상적으로 되지 않는다.

아래처럼 말이다.

 

SELECT DISTINCT [name], [age]
FROM TABLE_A
ORDER BY [age] ASC

 

결과 데이터

 

 

 

[해결]

 

MIN(AGE)를 활용하면 원하는 결과를 출력할 수 있다.

 

SELECT DISTINCT [name], MIN(AGE)
FROM TABLE_A
GROUP BY [name]
ORDER BY MIN(AGE) ASC

 

결과 데이터

반응형