문제
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 문제였지만 포스팅 하게 되었다.
'코딩테스트 > SQL - 프로그래머스' 카테고리의 다른 글
SQL 고득점 kit(JOIN) - 5월 식품들의 총매출 조회하기 (0) | 2024.03.20 |
---|---|
SQL 고득점 kit(JOIN) - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (2) | 2024.03.14 |
SQL 고득점 kit(GROUP BY) - 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기 (0) | 2024.03.01 |
SQL 고득점 kit(GROUP BY) - 조건에 맞는 사원 정보 조회하기 (0) | 2024.03.01 |
SQL 고득점 kit(JOIN) - 주문량이 많은 아이스크림들 조회하기 (0) | 2024.02.20 |