https://school.programmers.co.kr/learn/courses/30/lessons/284531
코드설명
GROUP BY + ROUND + CONCAT + ORDER BY 를 활용합니다.
문제에서 유의해야할점은 ORDER BY 부분입니다.
문제에서 AS TOTAL_DISTANCE를 활용해서 정렬을 할경우, TOTAL_DISTANCE는 CONCAT함수가 붙음으로써 올바르게 정렬이 안됩니다.
그렇기에, ROUND(SUM(D_BETWEEN_DIST),1) DESC 를 활용하거나,
단순히 SUM(D_BETWEEN_DIST) 로 해도 가능하지만 엄밀하게 말하면 ROUND 한 값으로 처리해주는 것이 더 명확합니다.
SELECT문에 명시된 값 중 CONCAT이나 어떤 가공함수가 들어간 것일경우에 직접 정렬조건으로 사용하는 것보다는 새롭게 선언해서 사용하는것이 안전합니다.
코드
-- 코드를 작성해주세요
SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), "km") AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), "km") AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUND(SUM(D_BETWEEN_DIST), 1) DESC;
SELECT
SD1.ROUTE AS ROUTE,
CONCAT(ROUND(SUM(SD1.D_BETWEEN_DIST), 1), "km") AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(SD1.D_BETWEEN_DIST), 2), "km") AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE AS SD1
GROUP BY SD1.ROUTE
ORDER BY ROUND( SUM(SD1.D_BETWEEN_DIST),1 ) DESC
ORDER BY 절을 SUM(D_BETWEEN_DIST) DESC로 변경했습니다. 이는 'km' 문자열이 포함된 TOTAL_DISTANCE로 정렬하면 문자열 정렬이 되어 원하는 결과가 나오지 않기 때문입니다.
SELECT SD.ROUTE, CONCAT(ROUND( SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE , CONCAT(ROUND( AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE AS SD
GROUP BY SD.ROUTE
# ORDER BY TOTAL_DISTANCE DESC
ORDER BY SUM(D_BETWEEN_DIST) DESC