[QueryDSL] 함수 + Group By

KMS·2022년 5월 9일
0

QueryDSL

목록 보기
4/8

QueryDSL을 이용해서 MySQL에서 제공하는 함수들 사용과 Group By를 사용하는 것을 보도록 하겠습니다.

함수 + Group By

	@Test
    void groupBy() {
        factory = new JPAQueryFactory(em);
        QTeam team = QTeam.team;
        QMember member = QMember.member;

        List<Tuple> result = factory.select(team.name, member.age.avg(), member.count())
                .from(member)
                .join(member.team, team) // member LEFT JOIN team
                .groupBy(team.name)
                .having(member.age.avg().goe(25)) // having도 사용 가능
                .fetch();
        for (Tuple tuple : result) {
            System.out.println("tuple = " + tuple);
        }

	Tuple tupleA = result.get(0); //tuple = [TeamA, 35.0, 3]
    Tuple tupleB = result.get(1); //tuple = [TeamB, 55.0, 1]

	Assertions.assertThat(tupleA.get(member.age.avg())).isEqualTo(35);
	Assertions.assertThat(tupleB.get(member.age.avg())).isEqualTo(55);

groupBy()를 통해 Grouping을 할 수 있으며, having()도 사용할 수 있습니다.
사용 가능한 함수들은 member.count(), member.age.sum(), member.age.avg(), member.age.max(), member.age.min() 등등이 있습니다. member.age.avg()를 할 경우, Member의 age의 평균 값을 가져옵니다.

profile
Student at Sejong University Department of Software

0개의 댓글