[프로그래머스] 노선별 평균 역 사이 거리 조회하기

yenpkr·2025년 3월 3일
0

sql

목록 보기
42/91

문제

제출

SELECT route ROUTE, concat(round(sum(d_between_dist),1),'km') TOTAL_DISTANCE, concat(round(avg(d_between_dist),2),'km') AVERAGE_DISTANCE
from subway_distance
group by 1
order by TOTAL_DISTANCE*1 desc

🚨 error

SELECT route ROUTE, concat(round(sum(d_between_dist),1),'km') TOTAL_DISTANCE, concat(round(avg(d_between_dist),2),'km') AVERAGE_DISTANCE
from subway_distance
group by 1
order by 2 desc

테스트에서는 성공인데, 제출하면 오답으로 떴다.
정렬이 문제였는데, 문자열 기준으로 정렬이 되어 숫자 정렬로 바꾸어주어야 했다.
문자 -> 숫자 정렬로 바꾸는데 2가지 방법이 있다.

CAST()

order by cast(TOTAL_DISTANCE as SIGNED) desc

  • SIGNED vs UNSIGNED
    • SIGNED(부호 있는 정수):
      양수와 음수를 모두 저장할 수 있음.
    • UNSIGNED(부호 없는 정수):
      음수가 없고 0부터 시작하는 양수만 저장 가능.

*1 or +0

order by TOTAL_DISTANCE*1 desc
값이 변하지 않는 *1를 덧붙여, 숫자 타입이라는 걸 묵시적으로 선언한다.

또 다른 답

SELECT route ROUTE, concat(round(sum(d_between_dist),1),'km') TOTAL_DISTANCE, concat(round(avg(d_between_dist),2),'km') AVERAGE_DISTANCE
from subway_distance
group by 1
order by SUM(d_between_dist) desc

아예 정렬을 km 붙이기 전 상태 숫자 기준으로 정렬했다.

참조 블로그

0개의 댓글