본문 바로가기

코딩테스트/SQL - 프로그래머스

SQL 고득점 kit(GROUP BY) - 노선별 평균 역 사이 거리 조회하기

문제

https://school.programmers.co.kr/learn/courses/30/lessons/284531#qna

 

풀이

https://school.programmers.co.kr/questions/73074

 

 

-- 풀이 쿼리
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 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 TOTAL_DISTANCE DESC

 

아니 이게 왜 틀렸지? 싶었다. 복잡한 조건도 없었고, 정렬 조건에 맞춰서 정렬도 제대로 했는데??

 

 

찬찬히 다시 읽어보았다.

내가 짠 쿼리를 잘 보자. 어떻게 되어 있는가?

CONCAT( 어쩌구... ' km') 

 

!!!!

 

TOTAL_DISTANCE나 AVERAGE_DISTANCE는 CONCAT으로 인해 더 이상 숫자가 아니게 되었는데, 이 부분을 간과했던 것이다.

그래서 TOTAL_DISTANCE를 기준으로 정렬하니 틀렸던 것.

 

그럼 어떻게 해야 할까? 어쩌긴 뭘 어째! 순수 숫자 값으로만 정렬하면 되지!

 

해서 풀이 쿼리처럼 고쳐서 제출하니, ACCEPTED 되었다.

 

꼼꼼히 문제를 읽지 않고 지나가면 분명 틀릴법한 문제여서, Lv2 문제였지만 포스팅 하게 되었다.