Ayden's journal

groupBy

Prisma의 groupBy 기능은 SQL의 GROUP BY와 유사하게 데이터를 그룹화하고, 각 그룹에 대해 집계 연산을 수행할 수 있는 기능이다. 이를 통해 특정 필드를 기준으로 데이터를 묶고, 각 그룹에 대해 합계, 평균, 개수 등의 통계를 쉽게 계산할 수 있다. findMany와 비슷하게 where, take, skip, orderBy를 사용하여 조건을 지정할 수 있다.

getMostLikedReport(gte: Date, take: number) {
  return this.prisma.reportLike.groupBy({
    by: ['reportId'],
    _count: {
      userId: true,
    },
    where: {
      createdAt: {
        gte,
      },
    },
    orderBy: {
      _count: {
        userId: 'desc',
      },
    },
    take,
  });
}

 

by는 그룹화를 수행할 필드 목록이다. 배열의 형태로 제공해야하며, 여러 필드에 대해서 그룹화를 시도할 수 있다. 이후 각각의 그룹에 대해 _count, _sum, _avg, _min, _max를 사용해 집계 연산을 수행한다. 위의 getMostLikedReport 함수의 경우 정해진 기간( where : createdAt : gte )동안 좋아요를 누른 사용자의 수( _count : userId : true )를 집계하여 이를 내림차순으로 ( orderBy : _count : userId : 'desc' ) 정렬하고, 그 중 정해진 개수(take)만큼만 리턴하는 작업을 수행한다.

즉, getMostLikedReport 함수는 정해진 기간 동안 가장 많은 좋아요를 받은 게시글을 정해진 개수만큼 리턴하는 것이다.

블로그의 정보

Ayden's journal

Beard Weard Ayden

활동하기