12. Агрегации
Prisma предоставляет мощный API для агрегации данных: подсчёта, суммирования, нахождения минимума/максимума, среднего значения, а также группировки записей.
Метод aggregate()
Заголовок раздела «Метод aggregate()»const stats = await prisma.user.aggregate({ _count: { id: true }, // количество записей _avg: { age: true }, // среднее значение _sum: { balance: true }, // сумма _min: { age: true }, // минимум _max: { age: true }, // максимум})
console.log(stats._count.id) // 250console.log(stats._avg.age) // 31.4Метод count()
Заголовок раздела «Метод count()»// Подсчёт всех записейconst total = await prisma.user.count()
// Подсчёт с условиемconst activeUsers = await prisma.user.count({ where: { isActive: true },})
// Подсчёт вместе с данными через includeconst user = await prisma.user.findUnique({ where: { id: 1 }, include: { _count: { select: { posts: true, comments: true }, }, },})Метод groupBy()
Заголовок раздела «Метод groupBy()»const grouped = await prisma.user.groupBy({ by: ['role'], _count: { id: true }, _avg: { age: true }, having: { age: { _avg: { gt: 25 } }, }, orderBy: { _count: { id: 'desc' } },})Агрегации через связи
Заголовок раздела «Агрегации через связи»Можно считать связанные записи прямо в запросе:
const posts = await prisma.post.findMany({ include: { _count: { select: { comments: true, likes: true, }, }, },})