-
Notifications
You must be signed in to change notification settings - Fork 0
Aggregations
Carlos Lopez edited this page Jul 16, 2026
·
1 revision
Funciones de agregación: COUNT, SUM, AVG.
Contar registros con filtros opcionales.
const totalUsers = await db.$count(User);// Usuarios mayores de 18
const adults = await db.$count(User, gte('age', 18));
// Usuarios activos
const activeUsers = await db.$count(User, eq('isActive', true));
// Múltiples condiciones
const filtered = await db.$count(
User,
and(
gte('age', 18),
eq('status', 'verified')
)
);Sumar valores de un campo.
const totalAge = await db.$sum(User, 'age');
const totalPrice = await db.$sum(Product, 'price');// Suma de precios de productos en stock
const inventoryValue = await db.$sum(
Product,
'price',
gt('stock', 0)
);
// Total de edad de usuarios mayores
const seniorAge = await db.$sum(
User,
'age',
gte('age', 65)
);
// Múltiples condiciones
const filtered = await db.$sum(
Product,
'price',
and(
eq('category', 'electronics'),
lt('price', 1000)
)
);Promedio de valores en un campo.
const avgAge = await db.$avg(User, 'age');
const avgPrice = await db.$avg(Product, 'price');// Edad promedio de adultos
const adultAvgAge = await db.$avg(User, 'age', gte('age', 18));
// Precio promedio de productos premium
const premiumAvgPrice = await db.$avg(
Product,
'price',
eq('category', 'premium')
);
// Múltiples condiciones
const avgFiltered = await db.$avg(
Product,
'price',
and(
eq('inStock', true),
gte('rating', 4)
)
);import { eq, gt, and, gte } from '@kettu/gitdb';
const db = await gitDb({/* config */});
// Métricas de productos
const totalProducts = await db.$count(Product);
const productsInStock = await db.$count(Product, gt('stock', 0));
const totalInventoryValue = await db.$sum(Product, 'price');
const avgPrice = await db.$avg(Product, 'price');
// Productos premium
const premiumCount = await db.$count(Product, eq('category', 'premium'));
const premiumValue = await db.$sum(Product, 'price', eq('category', 'premium'));
console.log(`Total products: ${totalProducts}`);
console.log(`In stock: ${productsInStock}`);
console.log(`Inventory value: $${totalInventoryValue}`);
console.log(`Average price: $${avgPrice?.toFixed(2)}`);import { gte, lt, and } from '@kettu/gitdb';
// Usuarios por rangos de edad
const minors = await db.$count(User, lt('age', 18));
const adults = await db.$count(User, and(gte('age', 18), lt('age', 65)));
const seniors = await db.$count(User, gte('age', 65));
// Edades promedio
const avgAgeAll = await db.$avg(User, 'age');
const avgAdultAge = await db.$avg(User, 'age', gte('age', 18));
console.log(`Minors: ${minors}`);
console.log(`Adults: ${adults}`);
console.log(`Seniors: ${seniors}`);
console.log(`Average age: ${avgAgeAll}`);import { eq, gte, lt } from '@kettu/gitdb';
// Reportes de ventas
const totalSales = await db.$sum(Order, 'amount');
const avgOrderValue = await db.$avg(Order, 'amount');
const largeOrders = await db.$count(Order, gte('amount', 1000));
// Por categoría
const categorySales = {};
for (const cat of ['electronics', 'books', 'clothing']) {
categorySales[cat] = await db.$sum(Order, 'amount', eq('category', cat));
}
console.log('Category Sales:', categorySales);
console.log(`Average order: $${avgOrderValue}`);-
$count()- Devuelve number -
$sum()- Devuelve number (0 si no hay registros) -
$avg()- Devuelve number | null (null si no hay registros)
- Las agregaciones se calculan en memoria
- Para datasets muy grandes, considera filtrar primero
- Las agregaciones sin filtro pueden ser lentas si hay muchos registros
- Query API - Operaciones CRUD
- WHERE Operators - Filtros avanzados