https://school.programmers.co.kr/learn/courses/30/lessons/284531
코딩테스트 연습 > GROUP BY > 노선별 평균 역 사이 거리 조회하기
문제 분석
난이도: LEVEL2
문제 요구사항
SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성해주세요.
총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요.
결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.
컬럼
LINE: 호선
NO: 순번
ROUTE: 노선
STATION_NAME: 역 이름
D_BETWEEN_DIST: 역 사이 거리
D_CUMULATIVE: 노선별 누계 거리
km 추가: CONCAT() 활용
반올림: ROUND() 활용 EX) 2번째 파라미터 1: 소수 둘째 자리에서 반올림
오답 코드
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 TOTAL_DISTANCE DESC
오답 이유
현재 정렬의 기준을 보면 TOTAL_DISTANCE DESC 이다.
원하는 결과는 총 누계 거리를 기준으로 내림차순 정렬인데 예상대로 정렬되지 않는다.
TOTAL_DISTANCE의 Type은 문자열이다.
그럼 정렬 기준이 문자열인데 문자열의 정렬은 ASCII값 순서 즉 사전 순서대로 정렬이 된다.
EX)
10.0KM, 9.0KM를 정렬할 때 '1', '9'를 비교해서 정렬하면 9.0km가 먼저 온다
기준이 문자열 정렬이 아닌 숫자 타입으로 정렬하게 만들어준다.
정답 코드
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
'Algorithm > Programmers SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 조건에 맞는 사원 정보 조회하기 (0) | 2024.09.08 |
---|---|
[MySQL] 프로그래머스 연도 별 평균 미세먼지 농도 조회하기 (0) | 2024.09.08 |
[MySQL] 프로그래머스 물고기 종류 별 잡은 수 구하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 월별 잡은 물고기 수 구하기 (0) | 2024.09.07 |
[MySQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 (2) | 2024.09.07 |