문제 :
SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성해주세요.
총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요.
결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.
해결 방식 :
-- 코드를 작성해주세요
-- select route, sum(d_cumulative), avg(d.between_dist)
-- 누계거리 소수 둘째 / 평균 역사 소수 셋째 >> round 함수
-- km 함께 출력 >> concat
-- 누계거리 desc
결과 : 틀림
concat 함수를 사용해서 텍스트(Km) 넣어야 함
답안 :
select route, concat(round(sum(d_between_dist),3),"km") as TOTAL_DISTANCE, concat(round(avg(d_between_dist), 4),"km") as AVERAGE_DISTANCE
from subway_distance
group by 1
order by 2 desc
주의할 점 :
- 정렬 기준
- 'TOTAL_DISTANCE'를 기준으로 하면 안된다. 해당 칼럼은 concat() 함수로 인해 더이상 숫자가 아니다. 문자열이다. 따라서 이 컬럼을 기준으로 정렬 시 문자열(사전식) 정렬기준에 따라 정렬되는 버그가 발생한다.
- 반올림 함수 인자 설정
- round(숫자, 반올림할 자릿수)
- 반올림할 자릿수하는 말이 좀 헷갈림의 여지가 있다고 느껴지는데, 예를 들어 '소수 둘째 자리에서 반올림한다'고 가정하면 반올림할 자릿수라는 매개변수에는 1이 들어가야 한다.
- 즉, 반올림 연산 수행 후에 유효한 자릿수가 매개변수로 사용되는 것이다.
'SQL > 프로그래머스' 카테고리의 다른 글
[Lv.2] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.12.09 |
---|---|
[LV.2] 입양 시각 구하기(1) (0) | 2024.12.07 |
[Lv.2] 상품 별 오프라인 매출 구하기 (inner join, group by) (0) | 2024.11.23 |
[Lv.2] 카테고리 별 상품 개수 구하기 (STRING, 문자열 함수) (0) | 2024.11.07 |
[Lv.3] 대여 기록이 존재하는 자동차 리스트 구하기 (LEFT JOIN, GROUP BY) (0) | 2024.11.07 |