개발/SQL
숫자와 문자가 혼합된 컬럼을 중복없이 숫자로 정렬하는 법 (Postgre)
개발자 솜
2021. 11. 12. 10:33
쿼리를 짜다 보면 문자와 숫자가 혼합된 컬럼 즉, 강남구 도산대로 12길, 강남구 도산대로 2길, 강남구 도산대로 11길 이런 컬럼을 정렬해야 할 때가 있다.
그럴때 흔히 하는게 distinct와 order by를 혼합해서 사용하면 된다고 생각했는데 이게 자꾸 에러가 떴다. 그래서 다른 방법을 찾았다.
student 테이블의 컬럼을 보자.
address를 강남구 도산대로 1길, 2길 3길 순으로 정렬해볼것이다.
알다시피 그냥 ORDER BY 쿼리를 때리면 이런 결과가 뜬다.
SELECT address
FROM student
ORDER BY address
그러나 address의 길이에 대해 먼저 오름차순 정렬을 해주고, address를 정렬해주면 원하던 결과값이 뜨게 된다.
SELECT address
FROM student
ORDER BY LENGTH(address) ASC, address ASC
잘 정렬은 되었지만 12길의 중복이 제거되지 않음을 알 수 있다. 중복을 제거하고 싶다면
SELECT address
FROM student
GROUP BY address
ORDER BY LENGTH(address) ASC, address ASC
GROUP BY를 추가해주면 원하는 결과를 얻을 수 있다.