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

슬픈 두꺼비님의 프로필 이미지

작성한 질문수

실전! Querydsl

Case 문

Case 문

20.10.01 17:36 작성

·

2.9K

4

OrderBy에도 사용 못하는건가요?

@Test
void complexCase() {
List<Member> result = queryFactory
.selectFrom(member)
.orderBy(new CaseBuilder()
.when(member.age.eq(10)).then(1)
.when(member.age.eq(20)).then(2)
.otherwise(3))
.fetch();
}

빨간줄이 막뜨더라구요..

답변 5

6

김영한님의 프로필 이미지
김영한
지식공유자

2020. 10. 02. 00:06

안녕하세요. 별님

다음과 같이 작성하면 됩니다^^

    @Test
    void simpleCaseByOrderBy() {

        NumberExpression<Integer> roleRankPath = new CaseBuilder()
                .when(member.rolename.eq("ROLE_MASTER")).then(1)
                .when(member.rolename.eq("ROLE_ADMIN")).then(2)
                .otherwise(3);

        List<Tuple> fetch = queryFactory
                .select(
                        member.username,
                        member.rolename,
                        roleRankPath.as("roleRank")
                )
                .from(member)
                .orderBy(roleRankPath.desc())
                .fetch();

        for (Tuple tuple : fetch) {
            System.out.println("tuple.get(member.username) = " + tuple.get(member.username));
            System.out.println("tuple.get(member.rolename) = " + tuple.get(member.rolename));
            System.out.println("tuple.get(roleRankPath) = " + tuple.get(roleRankPath));
        }
        System.out.println("result = " + fetch);
    }

도움이 되셨길 바래요^^

1

슬픈 두꺼비님의 프로필 이미지

2020. 10. 02. 00:34

감사합니다.   "select, 조건절(where)에서 사용 가능"

이라고 작성되어 있길래  from 서브쿼리처럼 안되는줄 알았네요.

0

김영한님의 프로필 이미지
김영한
지식공유자

2020. 10. 02. 00:42

메뉴얼을 업데이트해야겠네요.

고맙습니다. 별님^^!

0

슬픈 두꺼비님의 프로필 이미지

2020. 10. 01. 23:06

ORDER BY (
CASE
WHEN ENABLE = 0 THEN 4
WHEN ROLENAME = 'ROLE_MASTER' THEN 1
WHEN ROLENAME = 'ROLE_ADMIN' THEN 2
WHEN ROLENAME = 'ROLE_USER' THEN 3
END
), REGDATE DESC

오라클로 만든 쿼리중 ORDER BY절입니다.

enable은 탈퇴유무이고 0은 탈퇴회원이라 가장 마지막에,  그다음은 마스터, 관리자, 일반회원순으로 정렬을 하려고 합니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

2020. 10. 01. 22:17

안녕하세요. 별님

Case 관련 구문을 orderBy절에는 넣을 수 없습니다.

혹시 어떤 것을 하고 싶으신지 설명해주시면 제가 다른 방법을 찾아봐드릴께요^^

감사합니다.