🔓 문제 설명
SUBWAY_DISTANCE 테이블은 서울지하철 2호선의 역 간 거리 정보를 담고 있는 테이블입니다.
이 테이블을 활용하여 노선별 총 누계 거리와 평균 역 사이 거리를 계산해야 합니다.
- SUBWAY_DISTANCE 테이블
컬럼명 | 타입 | 설명 |
LINE | VARCHAR(10) | 호선명 |
NO | NUMBER | 순번 |
ROUTE | VARCHAR(50) | 노선 이름 |
STATION_NAME | VARCHAR(100) | 역 이름 |
D_BETWEEN_DIST | NUMBER | 역과 역 사이 거리 (km) |
D_CUMULATIVE | NUMBER | 누적 거리 (km) |
(문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/284531?language=mysql )
🎯 입출력 예제
- SUBWAY_DISTANCE 테이블
LINE | NO | ROUTE | STATION_NAME | D_BETWEEN_DIST | D_CUMULATIVE |
2호선 | 45 | 성수지선 | 용답 | 2.3 | 51.1 |
2호선 | 46 | 성수지선 | 신답 | 1 | 52.1 |
2호선 | 47 | 성수지선 | 용두(동대문구청) | 0.9 | 53 |
2호선 | 48 | 성수지선 | 신설동 | 1.2 | 54.2 |
2호선 | 49 | 신정지선 | 도림천 | 1 | 55.2 |
2호선 | 50 | 신정지선 | 양천구청 | 1.7 | 56.9 |
2호선 | 51 | 신정지선 | 신정네거리 | 1.9 | 58.8 |
2호선 | 52 | 신정지선 | 까치산 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
ROUTE | TOTAL_DISTANCE | AVERAGE_DISTANCE |
신정지선 | 6km | 1.5km |
성수지선 | 5.4km | 1.35km |
🏆 핵심 포인트
✅ 문자열 정렬이라 잘못된 결과를 낼 수 있음 → 반드시 숫자 기준으로 정렬
📝 코드 구현
🔶 SUM(CODE)을 사용하는 이유
- Front End는 JavaScript, React, Vue 등 여러 스킬로 이루어져 있음
이들의 CODE를 SUM()하여 하나의 비트 마스크로 만들고,
그 값과 & 연산을 하면 Front End 스킬 보유 여부를 한 번에 판별할 수 있습니다.
🔶 비트 연산자 &의 역할
- &는 AND 비트 연산자로, 개발자의 스킬 코드에 특정 스킬이 포함되어 있는지를 판별합니다.
-- 노선별 총 누적 거리와 평균 역 사이 거리 계산
WITH TOTAL_DIS AS (
SELECT
ROUTE, -- 노선명
ROUND(SUM(D_BETWEEN_DIST), 1) AS TOTAL_DISTANCE, -- 역 간 거리의 총합을 소수 첫째자리까지 반올림하여 '총 누적 거리' 계산
ROUND(AVG(D_BETWEEN_DIST), 2) AS AVERAGE_DISTANCE -- 역 간 거리의 평균을 소수 둘째자리까지 반올림하여 '평균 역 사이 거리' 계산
FROM SUBWAY_DISTANCE
GROUP BY ROUTE -- 노선별로 그룹화
)
-- 최종 결과 출력
SELECT
A.ROUTE, -- 노선명
CONCAT(A.TOTAL_DISTANCE, 'km') AS TOTAL_DISTANCE, -- 총 누적 거리에 'km' 단위 문자열 붙이기
CONCAT(A.AVERAGE_DISTANCE, 'km') AS AVERAGE_DISTANCE -- 평균 역 사이 거리에 'km' 단위 문자열 붙이기
FROM TOTAL_DIS A
ORDER BY A.TOTAL_DISTANCE DESC -- 총 누적 거리 기준 내림차순 정렬
🔥 인사이트
🔹 결과값에 CONCAT()을 사용할 경우 SELECT절 다음 ORDER BY절 실행으로 인한 잘못된 정렬이 될 수 있음
-- 최종 결과 출력
SELECT
A.ROUTE,
CONCAT(A.TOTAL_DISTANCE, 'km') AS TOTAL_DISTANCE, -- 총 누적 거리에 'km' 단위 문자열 붙이기
CONCAT(A.AVERAGE_DISTANCE, 'km') AS AVERAGE_DISTANCE -- 평균 역 사이 거리에 'km' 단위 문자열 붙이기
FROM TOTAL_DIS A
-- CONCAT() 전 값으로 정렬
ORDER BY A.TOTAL_DISTANCE DESC -- 총 누적 거리 기준 내림차순 정렬
'DB_이야기' 카테고리의 다른 글
📘 [SQL 함수 정리] 문자열 함수 총정리 (0) | 2025.05.09 |
---|---|
📘 [SQL 함수 정리] 숫자형 함수 (0) | 2025.05.09 |
🚀[SQL 알고리즘 문제 풀이] Programmers : 언어별 개발자 분류하기(with 2진수, AND연산) (0) | 2025.05.06 |
🚀[SQL 알고리즘 문제 풀이] Programmers : 가격대 별 상품 개수 구하기 (with FLOOR()) (0) | 2025.05.05 |
🚀[SQL 알고리즘 문제 풀이] Programmers : 즐겨찾기가 가장 많은 식당 정보 출력하기(with RANK() OVER()) (0) | 2025.05.05 |