Перейти к содержимому

12. Агрегации

Prisma предоставляет мощный API для агрегации данных: подсчёта, суммирования, нахождения минимума/максимума, среднего значения, а также группировки записей.

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) // 250
console.log(stats._avg.age) // 31.4
// Подсчёт всех записей
const total = await prisma.user.count()
// Подсчёт с условием
const activeUsers = await prisma.user.count({
where: { isActive: true },
})
// Подсчёт вместе с данными через include
const user = await prisma.user.findUnique({
where: { id: 1 },
include: {
_count: {
select: { posts: true, comments: true },
},
},
})
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,
},
},
},
})