Inflearn brand logo image

인프런 커뮤니티 질문&답변

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

김영한의 실전 데이터베이스 - 기본편

CASE 문 기본2

SELECT 절에서 CASE문을 사용한 이후, ORDER BY 절에서도 동일한 CASE 문을 사용하는 경우

작성

·

27

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 대상 위치]

  • 강의 영상:03:00 지점

  • 강의록:6. CASE 문.pdf - CASE 문 기본2 - CASE 문과 사용 위치


[질문 내용]
안녕하세요, 영한님.

다음과 같이 'SELECT 절에서 사용한 CASE 문을 그대로 복사-붙여넣기 해서 ORDER BY 절에서 사용(THEN 결과는 1, 2, 3으로 변경)' 하셨는데요(아래 코드. 방법1).

ORDER BY
  CASE
    WHEN price >= 100000 THEN 1
    WHEN price >= 30000  THEN 2
    ELSE 3
  END ASC

 

실습하던 중 아래 코드(방법2)와 같이 'SELECT 절에서 정의한 컬럼 별칭(price_label)과 THEN 값('고가', '중가', 저가')을 이용'해서 정렬할 수도 있겠다고 생각해서 시도해봤고, 실행이 성공하여 영한님 코드와 동일한 결과가 나왔습니다.

ORDER BY
  CASE
    WHEN price_label = '고가' THEN 1
    WHEN price_label = '중가' THEN 2
    WHEN price_label = '저가' THEN 3
  END ASC

 

이때 자바와 같은 프로그래밍 언어 입장에서 보면 방법2의 경우가 'SELECT 절의 CASE 문 로직이 바뀌더라도 ORDER BY 절의 CASE 문 로직은 변경할 필요가 없으므로' 유지보수성 측면에서 더 좋겠다고 판단했습니다.

 

그런데 다음과 같은 반론(?)도 생각나더라구요.

  • (애플리케이션 로직과 달리) 쿼리 문은 엄청나게 길고 복잡해질 가능성이 적으므로, 그냥 방법1처럼 복사-붙여넣기 해서 써도 무방하다.

  • 오히려 ORDER BY 절의 CASE 문을 새롭게 작성하는 과정에서 오타가 발생하여 오류를 일으킬 위험이 존재하니, 그냥 방법1처럼 복사-붙여넣기 해서 써도 무방하다.

  • 간단한 쿼리의 경우 ORDER BY 절의 CASE 문을 새롭게 작성하는 데에 비교적 많은 시간이 소모되는 비효율성이 존재하니, 그냥 방법1처럼 복사-붙여넣기 해서 써도 무방하다.

이에 대해서 영한님의 의견은 어디에 가까우신가 의견 여쭙고 싶어서 글 남깁니다!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. dev.rudevico님.

SELECT 절과 ORDER BY 절에서 CASE 문을 사용할 때 어떤 방식이 더 효율적인지에 대한 고민을 하신 것 같습니다. 두 방법 모두 장단점이 있고, 상황에 따라 적절한 방법을 선택하는 것이 중요합니다.

방법 1: 직접 복사-붙여넣기

  • 장점: 쿼리 문 자체가 비교적 복잡하지 않다면, 복사-붙여넣기를 통해 빠르게 작업할 수 있습니다.
  • 단점: 로직이 변경될 경우, SELECT와 ORDER BY 절 모두를 수정해야 하며, 이 과정에서 실수가 발생할 수 있습니다.

방법 2: SELECT에서 정의한 별칭 사용

  • 장점: 로직의 유지보수가 용이합니다. 만약 SELECT 절의 로직이 바뀌어도 ORDER BY 절에서는 값을 변경할 필요가 없습니다.
  • 단점: 때로는 복잡한 CASE문으로 인해 별칭 사용 시 혼란이 생길 수 있으며, 데이터베이스에 따라서 성능상 이슈가 발생할 수도 있습니다.

김영한님의 의견을 예상해 본다면:

일반적으로 김영한님은 유지보수성을 중요하게 여기실 가능성이 높습니다. 특히 프로젝트가 커지고, 여러 사람이 작업할 때 코드의 일관성과 변경 용이성은 중요합니다. 그러므로 방법 2를 여러 상황에 맞춰 신중히 고려해보실 것으로 예상합니다.

관련된 유사한 답변도 같이 참고해 보시면 좋을 것 같습니다:
- QueryDSL 사용 시 order by case 구문 질문 드립니다! - QueryDSL과 ORDER BY CASE 구문 관련 새로운 방법에 대한 내용이 논의되고 있습니다.
- 정렬 조건에 대해 질문이 있습니다. - Enum으로 정렬 문제를 다루고 있으며, 유지보수성과 관련된 내용이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

질문하기