Coding Test/SQL Coding Test

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

nam_ji 2024. 11. 5. 12:36

노선별 평균 역 사이 거리 조회하기 - LV.2

문제

  • 지하철 역 간 거리 정보를 담은 SUBWAY_DISTANCE 테이블이 있습니다.
  • 테이블의 컬럼은 LINE, NO, ROUTE, STATION_NAME, D_BETWEEN_DIST, D_CUMULATIVE의 컬럼이 존재하고 각각 호선, 순번, 노선, 역 이름, 역 사이 거리, 노선별 누계 거리를 의미합니다.
  • 문제
    1. 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 조회하는 SQL문을 작성하는 문제입니다.
    2. 총 누계 거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻하고 총 누계 거리와 평균 역 사이 거리는 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 하고,
    3. 총 누계 거리는 소수 둘쨰자리에서, 평균 역 사이의 거리는 소수 세째 자리에서 반올림 한 뒤 단위(km)를 함께 출력하고,
    4. 결과는 총 누계 거리를 기준으로 내림차순 정렬하여 출력하는 문제입니다.


프로그래머스 코드

  • SELECT로 조회하고 싶은 컬럼을 작성합니다.
  • 여기서 총 누계 거리를 위해 SUM 함수로 역 사이의 거리에 대한 총 합을 구하고 ROUND 함수로 조건에 맞게 반올림 해줍니다. 반올림을 위한 값은 해당 자리에서 반올림 하는게 아니라 그 위치까지만 나타내겠다는 의미입니다. 즉, ROUND(SUM(D_BETWEEN_DIST), 1) 이 값은 소수점 1자리까지만 나타내겠다는 의미입니다. 이후 조회된 값을 km를 붙여서 출력될 수 있게 CONCAT 함수를 사용하고 마지막으로 AS를 통해 조회되는 컬럼명이 TOTAL_DISTANCE가 될 수 있게 해주었습니다.
  • 나머지 값을 다른 함수는 똑같지만 평균을 구해야 하기 때문에 SUM 함수 자리에 AVG 함수를 사용했고 AS를 통해 AVERAGE_DISTANCE로 설정했습니다.
  • FROM으로 조회하고 싶은 테이블명을 지정하고
  • GROUP BY로 ROUTE를 기준으로 그룹지을 수 있게 해주었습니다.
  • 마지막으로 ORDER BY를 통해 총 누계 거리를 기준으로 내림차순 정렬될 수 있게 해주면 해결됩니다.
-- 코드를 작성해주세요
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;