<SQL> ORDER BY 이해하기 - [Programmers] 노선별 평균 역 사이 거리 조회하기

2025. 10. 12. 14:01·STUDY

들어가며

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정말 쉬운 문제인데, 쿼리 테스트 볼 때 급해져 놓칠만한 요소라 생각하여 정리해보고자 합니다.


해당 문제는 난이도도 Lv2 문제로 정말 쉬운 문제이지만 함정이 있습니다.

 

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 2 DESC;

해당 쿼리문처럼 2번째 열(TOTAL_DISTANCE)을 기준으로 내림차순 정렬을 하는 것을 일반적으로 생각할 수 있습니다.

실제로 테스트 케이스에선 저 쿼리문을 사용해도 통과가 됩니다.

 

하지만!

제출을 하면 실패를 하게 되는데 그 이유는 문자열과 숫자열의 정렬 방식에 있습니다.

 

TOTAL_DISTANCE 쿼리문을 살펴보면 CONCAT을 통해 총 누계 거리(숫자)와 'km'(문자)를 합쳐주었습니다.

SQL에선 숫자와 문자를 합치게 되면 문자로 인식하게 됩니다.

 

따라서 문자열 정렬 규칙을 따르기 때문에

100km vs 20km 와 같은 경우 문자열 규칙에 따라 제일 앞자리가 2인 20km가 더 큰 누적 거리로 인식되게 됩니다.

 

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 SUM(D_BETWEEN_DIST) DESC;

그래서 해당 쿼리문처럼 귀찮지만 ORDER BY 절에 총 누적거리를 구해주도록 다시 작성하여 정렬하면 원하는 대로 누적 거리에 따른 내림차순 정렬이 가능하게 됩니다. 

'STUDY' 카테고리의 다른 글

<Figma> 피그마 기초  (0) 2025.10.16
<SQL> SELECT와 비트연산자 이해하기 - [Programmers] 언어별 개발자 분류하기  (0) 2025.10.14
<SQL> IN vs EXISTS - [Programmers] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기  (0) 2025.10.09
<SQL> MAX 함수 이해하기 - [Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기  (0) 2025.10.08
티스토리 글 검색 포털에 노출시키기  (0) 2025.09.25
'STUDY' 카테고리의 다른 글
  • <Figma> 피그마 기초
  • <SQL> SELECT와 비트연산자 이해하기 - [Programmers] 언어별 개발자 분류하기
  • <SQL> IN vs EXISTS - [Programmers] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
  • <SQL> MAX 함수 이해하기 - [Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
승화(承和)
승화(承和)
데이터를 통해 문제의 본질을 파악하고, 실행 가능한 전략으로 연결하는 취준생입니다.
  • 승화(承和)
    일상을 담다
    승화(承和)
  • TOTAL
    TODAY
    YESTERDAY
  • NOTICE

    • 데이터 수집 중입니다.
  • MENU

    • HOME
    • PROJECT
    • JOB
    • STUDY
    • DAILY
  • BEST

  • TAG

    포트폴리오
    SQL
    html
    아잉단
    쿼리테스트
    MySQL
    렛츠커리어
    자기소개서 완성 챌린지
    마케팅 플랜
    프로그래머스
  • POSTS

  • COMMENTS

  • hELLO· Designed By정상우.v4.10.4
승화(承和)
<SQL> ORDER BY 이해하기 - [Programmers] 노선별 평균 역 사이 거리 조회하기
상단으로

@Since 2025

궁금한 점이 있으시다면 언제든지 편하게 연락 주세요.

Instagram Notion Github Tableau Mail

티스토리툴바