문제 : 

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

 

주의할 점 : 

  1. 정렬 기준 
    • 'TOTAL_DISTANCE'를 기준으로 하면 안된다. 해당 칼럼은 concat() 함수로 인해 더이상 숫자가 아니다. 문자열이다. 따라서 이 컬럼을 기준으로 정렬 시 문자열(사전식) 정렬기준에 따라 정렬되는 버그가 발생한다.
  2. 반올림 함수 인자 설정
    • round(숫자, 반올림할 자릿수)
    • 반올림할 자릿수하는 말이 좀 헷갈림의 여지가 있다고 느껴지는데, 예를 들어 '소수 둘째 자리에서 반올림한다'고 가정하면 반올림할 자릿수라는 매개변수에는 1이 들어가야 한다.
    • 즉, 반올림 연산 수행 후에 유효한 자릿수가 매개변수로 사용되는 것이다.

+ Recent posts