Skills/SQL

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

듀공🥕 2024. 3. 12. 18:23

 

1. 문제


2. 문제 풀기 전에,

  • SUBWAY_DISTANCE  👉🏻 노선, 총 누계 거리, 평균 역 사이 거리 조회
  • 1) 노선 별 그룹화  2) 총 누계 거리는 소수 둘째 자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림  3) ‘km’ 단위 붙이기
  • 총 누계 거리 DESC
  • 문자열을 합체 및 연결해 주는 CONCAT 함수 생각하기

3. 테이블

SUBWAY_DISTANCE

 

4. 풀이 과정

1단계) 총 누계 거리는 역 사이의 거리의 총합을 의미하는데, SUM() 함수를 이용하여 총합을 계산해 준다. 그리고 AVG() 함수를 이용하여 평균 역 사이의 거리를 계산해 준다. 

계산한 두 값은 ROUND() 함수를 이용하여 소수 둘째 자리와 소수 셋째 자리에서 반올림 해준다.

SELECT ROUTE,
       ROUND(SUM(D_BETWEEN_DIST), 1) AS TOTAL_DISTANCE,
       ROUND(AVG(D_BETWEEN_DIST), 2) AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE

 

2단계) 문자열을 합체 및 연결해 주는 CONCAT() 함수를 이용하여 총합과 평균을 계산한 값에 ‘km’ 단위를 붙여준다.

    👨🏻‍🏫 CONCAT() = SELECT CONCAT(str1, str2, …)

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

 

3단계) 노선별로 계산값을 조회하기 위해 ROUTE를 기준으로 그룹화를 해준다.

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

 

4단계) 총 누계 거리를 기준으로 내림차순 정렬을 해준다.

여기서 TOTAL_DISTANCE로 정렬하지 않은 이유는 해당 컬럼에 문자열 ‘km’이 포함되어 있기 때문이다.

때문에 숫자열만 포함된 ‘ROUND(SUM(D_BETWEEN_DIST), 1)’를 기준으로 정렬을 해준다.

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 ROUND(SUM(D_BETWEEN_DIST), 1) DESC;

 

5. 완성 코드

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 ROUND(SUM(D_BETWEEN_DIST), 1) DESC;

 

 

🔗 관련 링크

프로그래머스 문제 - https://school.programmers.co.kr/learn/courses/30/lessons/284531

CONCAT 함수 설명 - https://sesok808.tistory.com/491

728x90