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

활동하기