RESTForge

Aggregate

Agregasi data dengan SUM, COUNT, AVG, MIN, MAX dan GROUP BY

Endpoint /aggregate menjalankan fungsi agregasi pada data endpoint tanpa perlu menulis query SQL secara manual. Mendukung lima fungsi standar (COUNT, SUM, AVG, MIN, MAX), pengelompokan data dengan GROUP BY, filter hasil dengan HAVING, dan JOIN ke tabel lain.

Kapan Menggunakan /aggregate (When to Use /aggregate)

SkenarioContoh
Menghitung jumlah recordTotal supplier aktif
Menjumlahkan nilai numerikTotal stok seluruh produk
Menghitung rata-rataRata-rata harga jual produk per kategori
Mencari nilai minimum/maksimumHarga terendah dan tertinggi per kategori
Laporan pengelompokanJumlah produk dan total stok per kategori

Konfigurasi Payload (Payload Configuration)

Aktifkan endpoint aggregate di payload:

payload/item-product.json (contoh)
{
    "tableName": "item_product",
    "primaryKey": "item_product_id",
    "action": {
        "aggregate": true
    }
}

Fungsi Agregasi yang Tersedia (Available Aggregation Functions)

FungsiKeteranganField
countMenghitung jumlah record"*" (wildcard) atau nama kolom
sumMenjumlahkan nilaiKolom numerik
avgMenghitung rata-rataKolom numerik
minNilai minimumKolom numerik atau tanggal
maxNilai maksimumKolom numerik atau tanggal

Wildcard "*" hanya valid untuk fungsi count. Fungsi lain memerlukan nama kolom spesifik.

Contoh Penggunaan (Usage Examples)

Count Sederhana (Simple Count)

Menghitung total supplier:

POST /api/mini-inventory/supplier/aggregate
{
    "operations": [
        { "function": "count", "field": "*", "alias": "total_supplier" }
    ]
}

Response:

{
    "success": true,
    "data": {
        "total_supplier": 25
    },
    "timestamp": "2026-04-16T10:30:00.000Z"
}

Beberapa Fungsi Sekaligus (Multiple Functions)

Menghitung total produk, total stok, dan rata-rata harga:

POST /api/mini-inventory/item-product/aggregate
{
    "operations": [
        { "function": "count", "field": "*", "alias": "total_items" },
        { "function": "sum", "field": "stock", "alias": "total_stock" },
        { "function": "avg", "field": "selling_price", "alias": "avg_price" }
    ]
}

Response:

{
    "success": true,
    "data": {
        "total_items": 150,
        "total_stock": 4500,
        "avg_price": 125000
    },
    "timestamp": "2026-04-16T10:30:00.000Z"
}

GROUP BY — Pengelompokan Data (Data Grouping)

Menghitung jumlah produk dan total stok per kategori:

POST /api/mini-inventory/item-product/aggregate
{
    "operations": [
        { "function": "count", "field": "*", "alias": "item_count" },
        { "function": "sum", "field": "stock", "alias": "total_stock" }
    ],
    "group_by": ["category_id"],
    "sort_columns": [
        { "column": "total_stock", "direction": "DESC" }
    ]
}

Response berisi array data yang dikelompokkan:

{
    "success": true,
    "data": [
        { "category_id": "cat-001", "item_count": 15, "total_stock": 450 },
        { "category_id": "cat-002", "item_count": 8, "total_stock": 120 },
        { "category_id": "cat-003", "item_count": 5, "total_stock": 75 }
    ],
    "timestamp": "2026-04-16T10:30:00.000Z"
}

GROUP BY dengan HAVING

Filter hasil agregasi: hanya kategori dengan total stok 100 atau lebih:

POST /api/mini-inventory/item-product/aggregate
{
    "operations": [
        { "function": "count", "field": "*", "alias": "item_count" },
        { "function": "sum", "field": "stock", "alias": "total_stock" }
    ],
    "group_by": ["category_id"],
    "having": {
        "conditions": [
            { "key": "total_stock", "operator": ">=", "value": 100 }
        ]
    }
}

HAVING hanya dapat digunakan bersamaan dengan GROUP BY. Request yang mengirim HAVING tanpa GROUP BY akan ditolak dengan error 400.

Agregasi dengan JOIN

Untuk menampilkan nama kategori (bukan hanya ID) dalam hasil GROUP BY, gunakan parameter joins:

POST /api/mini-inventory/item-product/aggregate
{
    "operations": [
        { "function": "count", "field": "*", "alias": "item_count" },
        { "function": "sum", "field": "stock", "alias": "total_stock" }
    ],
    "joins": [
        {
            "tableName": "category",
            "joinType": "LEFT",
            "sourceField": "category_id",
            "targetField": "category_id",
            "fields": ["category_name"]
        }
    ],
    "group_by": ["category_name"],
    "sort_columns": [
        { "column": "total_stock", "direction": "DESC" }
    ]
}

Response:

{
    "success": true,
    "data": [
        { "category_name": "Electronics", "item_count": 15, "total_stock": 450 },
        { "category_name": "Furniture", "item_count": 8, "total_stock": 120 }
    ],
    "timestamp": "2026-04-16T10:30:00.000Z"
}

Agregasi dengan Filter WHERE

Menghitung total stok hanya untuk produk aktif:

POST /api/mini-inventory/item-product/aggregate
{
    "operations": [
        { "function": "sum", "field": "stock", "alias": "active_stock" }
    ],
    "where": [
        { "key": "is_active", "value": true }
    ]
}

Konfigurasi JOIN (JOIN Configuration)

PropertyTipeWajibKeterangan
tableNamestringYaNama tabel yang akan di-JOIN
joinTypestringTidak"LEFT", "INNER", atau "RIGHT" (default: "LEFT")
sourceFieldstringYaKolom foreign key di tabel utama
targetFieldstringYaKolom primary key di tabel target
fieldsarrayYaKolom dari tabel target yang diambil

Format Response (Response Format)

KondisiFormat Data
Tanpa GROUP BYdata berisi satu object { alias1: value1, alias2: value2 }
Dengan GROUP BYdata berisi array [ { group_col: val, alias1: val1 }, ... ]

Langkah Selanjutnya (Next Steps)

On this page