order by 사용시 문제 0 2 840

by 정수리형 [SQL Query] [2021.12.21 16:06:11]


mysql 구버전에서는 실행되던 쿼리가

mysql8버전에서는 오류가 발생하였습니다.

해당 오류는
ORDER BY clause is not in SELECT list, references column 'DB명.테이블명.no' which is not in SELECT list; this is incompatible with DISTINCT

입니다.

select 문에 없는 컬럼을 order문에서 사용하게되어 문제가 되는것 같은데

select distinct adddate from tb_landcom order by adddate desc

로 했을 경우 쿼리는 정상적으로 실행은 되지만 제가 원하는 형태로 나오지 않아

사용하기가 힘드네요

기존에 사용하던 쿼리의 경우 데이터를 출력하면

no  adddate
10  AUTO_날짜_1
9  AUTO_날짜_2
8  AUTO_날짜_3
요러한 형태로 최근에 등록된 데이터가 no를 기준으로 내림차순으로 정렬이 됩니다.

select distinct adddate from tb_landcom order by adddate desc

이 쿼리로 했을 경우에는
no  adddate
10  AUTO_날짜_1
9  AUTO_날짜_1
8  AUTO_날짜_1
7 AUTO_날짜_2
6 AUTO_날짜_2
5 AUTO_날짜_2

중복값이 제외되지 않고 출력되는 형태로 나와버립니다.

해당 오류에 대해 검색 및 해결방안을 찾지 못해 글을 올리게 되었습니다.

제가 생각하는 오류가 맞는지 그리고 어떤형태 또는 함수를 사용해야 기존형태처럼 데이터를 출력 할수

있을까요?

옛날구버전만 사용하다 mysql8로 넘어오니 은근 어렵네요

by 마농 [2021.12.21 16:27:48]

질문이 이상한데요? 정확하게 오류가 나는 쿼리를 올려 주셔야죠?
올려주신 쿼리와 결과의 형식이 다른데요?
쿼리는 날짜만 조회하는데? 결과엔 번호도 나오나요?


by 마농 [2021.12.21 17:10:06]

기존 쿼리가 표준에 어긋나는 쿼리였고
새로운 서버의 설정이 표준을 따라야만 하는 설정이라면? (SQL_MODE = ONLY_FULL_GROUP_BY)
오류가 날 수 있습니다.
기존 쿼리가 여러개의 no 중에 어떤걸 가져와야 할지 명확하지 않습니다.
아무거나 가져와 조회하는 의미가 있습니다. (비표준, 권장하지 않음)
 

-- 1. 설정을 끄는 방법 : 권장하지 않음

-- 2. 아무거나 가져오게 하는 방안 (애매함, 기존 쿼리와 유사함)
SELECT ANY_VALUE(no) no
     , adddate
  FROM tb_landcom
 GROUP BY adddate
 ORDER BY no DESC
;
-- 3. MIN/MAX 등 사용 : 아무거나가 아닌 정확한 규칙 지정 (그나마 명확함)
SELECT MAX(no) no
     , adddate
  FROM tb_landcom
 GROUP BY adddate
 ORDER BY no DESC
;

 

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