본문 바로가기

SQL Kit/GROUP BY

노선별 평균 역 사이 거리 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제 목적

이 문제의 목적은 SQL에서 GROUP BY, SUM, AVG, ROUND, CONCAT, ORDER BY 등의 함수를 활용하여 데이터를 그룹화하고, 계산 및 포맷화하는 방법을 학습하는 것이다.

지하철 노선별로 역 사이 거리의 총합과 평균을 계산하며, 결과를 보기 좋게 포맷화하고 정렬하여 출력하는 과정을 통해 집계 데이터 분석 및 결과의 가독성 향상 기술을 익힌다.

이는 실무에서 대규모 데이터를 요약하고 통계 정보를 생성하는 데 유용한 기술이다.


2. 핵심 개념

GROUP BY

  • 정의: 데이터를 특정 열 값을 기준으로 그룹화하여 각 그룹별로 요약 결과를 반환.
SELECT 열1, SUM(열2)
FROM 테이블명
GROUP BY 열1;

2.2 SUM 함수

  • 정의: 특정 열의 값을 모두 더하여 합계를 반환하는 집계 함수.
SELECT SUM(열 이름)
FROM 테이블명;

2.3 AVG 함수

  • 정의: 특정 열의 평균 값을 계산하여 반환하는 집계 함수.
SELECT AVG(열 이름)
FROM 테이블명;

2.4 ROUND 함수

  • 정의: 숫자를 지정한 자릿수로 반올림하는 함수.
SELECT ROUND(숫자, 자릿수)
  • 데이터를 소수점 이하로 제한하여 가독성을 높임.

2.5 CONCAT 함수

  • 정의: 여러 문자열을 연결하여 하나의 문자열로 반환.
SELECT CONCAT(문자열1, 문자열2);
  • 숫자와 문자열을 조합하여 결과를 보기 좋게 포맷.
  • 정의: 결과를 특정 열을 기준으로 정렬.

3. 문제 해결 절차

  1. 데이터 분석:
    • SUBWAY_DISTANCE 테이블에서 ROUTE를 기준으로 데이터를 그룹화하고, 역 사이 거리(D_BETWEEN_DIST)의 합계와 평균을 계산해야 한다.
  2. 총합 및 평균 계산:
    • SUM 함수로 역 사이 거리의 총합을 계산하고 AVG 함수로 평균을 계산한다.
  3. 결과 포맷화:
    • ROUND를 사용하여 소수점을 적절히 반올림하고 CONCAT을 통해 단위(km)를 추가하여 가독성을 높인다.
  4. 결과 정렬:
    • SUM 값을 기준으로 내림차순 정렬하여 가장 긴 노선부터 출력한다.
  5. SQL 작성 및 실행:
    • 위의 모든 요구 사항을 반영하여 SQL 쿼리를 작성하고 실행한다.

4. 코드 작성

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

SELECT
    ROUTE,                                               -- 노선 이름
    CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE, -- 총 거리 (km 단위)
    CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE -- 평균 거리 (km 단위)
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:
  • 역 사이 거리(D_BETWEEN_DIST)의 합계를 소수 첫째 자리까지 반올림한 후, 문자열 km를 추가하여 포맷화.
  • CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE:
  • 역 사이 거리의 평균을 소수 둘째 자리까지 반올림한 후, 문자열 km를 추가하여 포맷화.

FROM 절

  • SUBWAY_DISTANCE:
  • 지하철 거리 데이터를 포함한 테이블.

GROUP BY 절

  • ROUTE:
  • 데이터를 노선별로 그룹화하여 집계 함수가 적용되도록 설정.

ORDER BY 절

  • ROUND(SUM(D_BETWEEN_DIST), 1) DESC:
  • 역 사이 거리의 총합(SUM)을 기준으로 내림차순 정렬.