CODING TEST/MySQL

Lv2 - 노션별 평균 역 사이 거리 조회하기

iamyuunzo 2025. 8. 1. 13:50

📌 문제 정보

- 문제 이름 : 프로그래머스 - (GROUP BY) 노선별 평균 역 사이 거리 조회하기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/284531

 

 

 

📌 문제 요약

- SUBWAY-DISTANCE 테이블 : LINE, NO, ROUTE, STATION_NAME, D_BETWEEN_DIST, D_CUMULATIVE

- SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성. 총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요. 결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.

 

예시)

LINE  NO  ROUTE  STATION_NAME  D_BETWEEN_DIST  D_CUMULATIVE
2호선 45 성수지선 용답 2.3 51.1
2호선 46 성수지선 신답 1.0 52.1
2호선 47 성수지선 용두(동대문구청) 0.9 53.0
2호선 48 성수지선 신설동 1.2 54.2
2호선 49 신정지선 도림천 1.0 55.2
2호선 50 신정지선 양천구청 1.7 56.9
2호선 51 신정지선 신정네거리 1.9 58.8
2호선 52 신정지선 까치산 1.4 60.2

 

출력)

ROUTE  TOTAL_DISTANCE  AVERAGE_DISTANCE
신정지선 6km 1.5km
성수지선 5.4km (계산 안됨)

 

 

 

📌 내 풀이 및 코드

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;

- km를 붙이는 방법을 몰랐음.

- ORDER BY에 별칭을 써도 되는줄 알았는데, 복잡한 계산식이나 CONCAT이 포함되면 직접적으로 쓰는게 안정적이라고 함.

- TOTAL_DISTANCE로 써주면 문자열로 정렬이 되기 때문에... 숫자여야 의미 있는 정렬이 되어서 숫자 함수 그대로 써주는게 안전

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** CONCAT() **

- 여러 문자열을 하나로 이어 붙이는 함수

-- 기본 문법
CONCAT(문자열1, 문자열2, ..., 문자열N)

-- 1. 문자열 이어 붙이기
SELECT CONCAT('Hello', ' ', 'World');
-- 결과: Hello World

-- 2. 숫자 + 문자열
SELECT CONCAT('Total: ', 100, '원');
-- 결과: Total: 100원

-- 3. 칼럼 값 연결하기
SELECT CONCAT(EMP_NAME, ' (', EMP_NO, ')') AS NAME_TAG
FROM HR_EMPLOYEES;
-- 결과 예: 김연주 (2020002)

-- 4. NULL 처리
SELECT CONCAT('A', NULL, 'B');
-- 결과: NULL ❌
SELECT CONCAT('A', IFNULL(NULL, ''), 'B');
-- 결과: AB ✅