[MySQL] varchar 컬럼 안의 숫자 정렬하기
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 값 바꿔서 다시 앱 개발 시작하자.