들어가며
https://school.programmers.co.kr/learn/courses/30/lessons/284531
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정말 쉬운 문제인데, 쿼리 테스트 볼 때 급해져 놓칠만한 요소라 생각하여 정리해보고자 합니다.
해당 문제는 난이도도 Lv2 문제로 정말 쉬운 문제이지만 함정이 있습니다.
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY 2 DESC;
해당 쿼리문처럼 2번째 열(TOTAL_DISTANCE)을 기준으로 내림차순 정렬을 하는 것을 일반적으로 생각할 수 있습니다.
실제로 테스트 케이스에선 저 쿼리문을 사용해도 통과가 됩니다.
하지만!
제출을 하면 실패를 하게 되는데 그 이유는 문자열과 숫자열의 정렬 방식에 있습니다.
TOTAL_DISTANCE 쿼리문을 살펴보면 CONCAT을 통해 총 누계 거리(숫자)와 'km'(문자)를 합쳐주었습니다.
SQL에선 숫자와 문자를 합치게 되면 문자로 인식하게 됩니다.
따라서 문자열 정렬 규칙을 따르기 때문에
100km vs 20km 와 같은 경우 문자열 규칙에 따라 제일 앞자리가 2인 20km가 더 큰 누적 거리로 인식되게 됩니다.
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY SUM(D_BETWEEN_DIST) DESC;
그래서 해당 쿼리문처럼 귀찮지만 ORDER BY 절에 총 누적거리를 구해주도록 다시 작성하여 정렬하면 원하는 대로 누적 거리에 따른 내림차순 정렬이 가능하게 됩니다.
'STUDY' 카테고리의 다른 글
| <Figma> 피그마 기초 (0) | 2025.10.16 |
|---|---|
| <SQL> SELECT와 비트연산자 이해하기 - [Programmers] 언어별 개발자 분류하기 (0) | 2025.10.14 |
| <SQL> IN vs EXISTS - [Programmers] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2025.10.09 |
| <SQL> MAX 함수 이해하기 - [Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2025.10.08 |
| 티스토리 글 검색 포털에 노출시키기 (0) | 2025.09.25 |
