
https://school.programmers.co.kr/learn/courses/30/lessons/284531
구할 값 :
테이블에서 노선별로 노선, 총 누계거리, 평균 역 사이 거리를 노선별로 조회.
조건 :
1) 총 누계거리와 평균 역 사이 거리 컬럼명은 TOTAL_DISTANCE, AVERAGE_DISTANCE로 지정
2) 총 누계거리는 소수점 둘째자리, 평균 역 사이 거리는 소수점 셋째자리에서 반올림
3) 총 누계거리와 평균 역 사이 거리는 단위(km)와 함께 출력
4) 결과는 총 누계거리 기준 내림차순
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 ROUND(SUM(D_BETWEEN_DIST), 2) DESC;
SELECT ROUTE,
CONCAT(ROUND(SUM(D_BETWEEN_DIST), 2), 'km') TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST), 3), 'km') AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY TOTAL_DISTANCE DESC
1) 반올림 위치 실수 -> 소수점 둘째자리에서 반올림이면 첫째자리까지 나와야 하니 round(~, 2) -> round(~, 1)로 바꿔야 함.
2) concat()함수 쓰면 결과값은 String이므로 order by 의 값을 round(sum(~), ~)으로 바꿔야한다.
+) 물론 문자열로 order by 할 수 있지만 문자열의 경우 문자의 순서, 숫자의 경우 수의 크기를 기준으로 정렬하기 때문에 정렬의 순서가 달라질 수 있어 오답처리 된다.
ex) 11, 2 의 경우
문자열 정렬 결과 :11, 2
숫자 정렬 결과 : 2, 11
1) CONCAT(값, '붙일 단위나 문자')
2) ROUND(값, 반올림으로 나타낼 위치) -> -1이면 10의 자리까지 표시(=1의 자리에서 반올림), 0이면 1의자리까지(= 소수점 첫째자리에서 반올림), 1이면 소수점 첫째자리까지(=소수점 둘쨰자리에서 반올림)
3) GROUP BY(그룹의 기준이 되는 컬럼)