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