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