문제 정리: 서울 지하철 2호선 역 간 거리 조회
1. 테이블 구조
컬럼명 |
데이터 타입 |
NULL 허용 |
설명 |
LINE |
VARCHAR(10) |
FALSE |
호선 (예: "2호선") |
NO |
NUMBER |
FALSE |
역 순번 |
ROUTE |
VARCHAR(50) |
FALSE |
노선명 (예: "성수지선") |
STATION_NAME |
VARCHAR(100) |
FALSE |
역 이름 |
D_BETWEEN_DIST |
NUMBER |
FALSE |
역 사이 거리 |
D_CUMULATIVE |
NUMBER |
FALSE |
누적 거리 |
2. 요구사항
- 각 노선(ROUTE) 별로 총 누계 거리와 평균 역 사이 거리를 계산.
- 출력 컬럼명:
TOTAL_DISTANCE
: 노선의 총 누계 거리 (소수점 둘째 자리 반올림 후 "km" 추가).
AVERAGE_DISTANCE
: 노선의 평균 역 사이 거리 (소수점 셋째 자리 반올림 후 "km" 추가).
- 총 누계 거리(
TOTAL_DISTANCE
) 기준 내림차순 정렬.
예시 실행 결과
ROUTE |
TOTAL_DISTANCE |
AVERAGE_DISTANCE |
신정지선 |
6km |
1.5km |
성수지선 |
5.4km |
1.35km |
문제풀이
[SQL 문제 풀이] 서울 지하철 2호선 노선별 거리 조회
문제 요약
서울지하철 2호선의 SUBWAY_DISTANCE
테이블에서 노선별 총 누계 거리(TOTAL_DISTANCE)와 평균 역 사이 거리(AVERAGE_DISTANCE)를 계산하는 SQL문을 작성합니다.
결과는 소수점 자리수를 지정하여 반올림한 값 뒤에 단위(km
)를 추가하고, 총 누계 거리 기준으로 내림차순 정렬합니다.
해결 과정
- 테이블 구조 이해
SUBWAY_DISTANCE
테이블의 주요 정보:
ROUTE
: 노선 이름.
D_BETWEEN_DIST
: 역 사이 거리.
D_CUMULATIVE
: 누적 거리 (노선별 전체 누계 거리 계산에 불필요).
- 요구사항 분석
- 각 노선별로:
- 총 누계 거리 =
SUM(D_BETWEEN_DIST)
- 평균 역 사이 거리 =
AVG(D_BETWEEN_DIST)
- 소수점 자리수 조정:
TOTAL_DISTANCE
: 소수 둘째 자리에서 반올림.
AVERAGE_DISTANCE
: 소수 셋째 자리에서 반올림.
- 단위(
km
) 추가.
- SQL 작성
- 집계 함수
SUM
과 AVG
를 사용해 그룹화.
ROUND
함수로 소수점 자리 조정.
GROUP BY
와 ORDER BY
사용으로 그룹화와 정렬.
최종 SQL 코드
SELECT 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 ROUTE
ORDER BY SUM(D_BETWEEN_DIST) DESC
결과
ROUTE |
TOTAL_DISTANCE |
AVERAGE_DISTANCE |
신정지선 |
6km |
1.5km |
성수지선 |
5.4km |
1.35km |
오답 노트
- DISTANCE의 소수점 자리 조정 누락
처음 작성한 SQL에서 ROUND
함수로 소수점 자리수를 반올림하지 않아 결과가 정확하지 않았습니다.
- GROUP BY와 ORDER BY 위치 문제
GROUP BY
를 지정하지 않아 집계 결과가 예상대로 나오지 않았습니다.
- 단위 추가 실수
ROUND
뒤에 'km'
를 추가하지 않아 요구사항을 충족하지 못했습니다.
배운 점
- concat 함수를 사용하여 수치형과 문자열을 연결해 데이터를 가공할 수 있었다.
- 그룹화된 데이터를 정렬하려면
ORDER BY
에서 집계 함수와 정렬 기준을 명확히 지정해야 합니다.