Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 노선별 평균 역 사이 거리 조회하기 (MySQL) 본문

DB/프로그래머스(MySQL)

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

luke-king 2025. 10. 17. 20:57

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/284531#

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

풀이.


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

이번 문제는 프로그래머스 "노선별 평균 역 사이 거리 조회하기" MySQL 문제다.

SQL 문제 바로 전 게시글의 문제와 비슷하다. 다른 점이라면 특정 컬럼 값에 "km"라는 문자를 붙여 줘야 한다는 거다.

그럼 바로 문제 풀이 해보겠다.

 

1. TOTAL_DISTANCE 컬럼은 합을 구하고 소수점 둘째 자리에서 반올림해주기 위해 처음에 SUM() 함수로 합을 구해준다.

다음으로 소수점 두번째 자리에서 반올림이니 ROUND() 함수를 사용해서 소수점 1자리만 나오게 해 준다. 마지막으로 "km"를 붙여 주기 위해 CONCAT() 함수를 사용해 준다.

 

(예를 들자면 CONCAT("감사합니다.", "다음에 또 오세요")라 하면 "감사합니다. 다음에 또 오세요"라고 출력된다. 이 함수는 2개 이상의 문자열이 있을 경우 합쳐준다.)

 

2. TOTAL_DISTANCE 값이 합을 구하는 거였다면 AVERAGE_DISTANCE는 평균을 구하니 AVG() 함수를 사용해주고 나머지는 위와 같다 다만 소수점 3번째 자리에서 반올림하니 2번째 자리만 나오게 해 준다.

 

3. ROUTE 컬럼 으로 그룹을 지어준다.

 

4. 마지막으로 내림차순인데 그냥 TOTAL_DISTANCE를 해주면 에러가 난다.

왜냐하면 CONCAT()을 쓰는 순간 문자열로 되어버렸기 때문에 숫자와 다르게 내림 차순 정렬을 제대로 해줄 수 없다.

그래서 합을 구한 SUM(D_BETWEEN_DIST)로 해줘야 정상적으로 내림차순 정렬이 된다.