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. 문제 해결 절차
- 데이터 분석:
- SUBWAY_DISTANCE 테이블에서 ROUTE를 기준으로 데이터를 그룹화하고, 역 사이 거리(D_BETWEEN_DIST)의 합계와 평균을 계산해야 한다.
- 총합 및 평균 계산:
- SUM 함수로 역 사이 거리의 총합을 계산하고 AVG 함수로 평균을 계산한다.
- 결과 포맷화:
- ROUND를 사용하여 소수점을 적절히 반올림하고 CONCAT을 통해 단위(km)를 추가하여 가독성을 높인다.
- 결과 정렬:
- SUM 값을 기준으로 내림차순 정렬하여 가장 긴 노선부터 출력한다.
- 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)을 기준으로 내림차순 정렬.
'SQL Kit > GROUP BY' 카테고리의 다른 글
월별 잡은 물고기 수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
---|---|
물고기 종류 별 잡은 수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
조건에 맞는 사원 정보 조회하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
가격대 별 상품 개수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |
입양 시각 구하기(1) [ 프로그래머스 | SQL Kit | Level 2 ] (0) | 2025.03.09 |