관리 메뉴

나만을 위한 블로그

[MySQL] varchar 컬럼 안의 숫자 정렬하기 본문

MySQL

[MySQL] varchar 컬럼 안의 숫자 정렬하기

참깨빵위에참깨빵 2020. 4. 16. 19:02
728x90
반응형

참고한 사이트 : https://m.blog.naver.com/PostView.nhn?blogId=altmshfkgudtjr&logNo=221463227578&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

 

MySQL 숫자기준 정렬 오류 해결법

이제 DB를 이용한 개발자들은 다들 한번씩은 이런 오류를 마주치게 될 것이다.​바로 내가 [1, 2, 3, 10,...

blog.naver.com

https://stackoverflow.com/questions/1625166/mysql-order-varchar-field-as-integer

 

mysql order varchar field as integer

I have a varchar field in my table and I want to sort it. But I need to handle this field as integer. Meaning if sort as text the order is "19,2,20" but I want to get the right order "2,19,20". Can

stackoverflow.com

(↑이 곳은 CAST()를 쓰는 방법이 여럿 있다는 걸 안 곳이다)

 

게임을 만들었는데 결과를 가져와 랭킹 형태로 띄우고 싶었다.

그래서 랭킹을 띄우긴 했지만 1, 2, 3 순으로 되는 게 아니라 1, 10, 11 순으로 정렬됐다.

이것저것 알아보다 해결법을 발견했다.

 

SELECT 컬럼명, (SELECT COUNT(*) FROM shoot WHERE record > t.record + 1) AS rank
FROM 테이블명 AS t
ORDER BY rank DESC;

 

 

이 쿼리문은 특정 테이블에서 랭킹을 구해주는 쿼리문이다. MySQL 8.x 이하에서 주로 사용하며 8.x 이상부터는 RANK()를 지원해준다고 한다. 이전 버전에선 지원해주지 않아 이런 쿼리문을 써서 랭킹을 구해야 한다.

 

글에선 ORDER BY 컬럼명 * 1을 하라고 나와있지만 처음엔 저렇게 해도 되지 않았다.

아마 컬럼명, (SELECT COUNT(*)~~t.record) 부분 때문일거라 생각했다. 그래서 이곳저곳에 +1, *1을 추가해보다가 저렇게 넣으니 제대로 작동했다.

 

 

이렇게 record가 1부터 쭉 나오는 걸 볼 수 있다. rank 컬럼은 신경쓰지 않아도 된다.

이제 record 값 바꿔서 다시 앱 개발 시작하자.

 
반응형

'MySQL' 카테고리의 다른 글

[MySQL] Error 1215: Cannot add foreign key constraint 에러 해결  (0) 2020.03.27
Comments