Menghitung Ukuran Keranjang Belanja di SQL (Basket Size)
Blog/Tutorial SQL/Menghitung Ukuran Keranjang Belanja di SQL (Basket Size)

Menghitung Ukuran Keranjang Belanja di SQL (Basket Size)

BimaBima
·22 September 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Ukuran keranjang belanja atau basket size adalah rata-rata jumlah item dalam satu order, dihitung dengan cara total item dibagi jumlah order unik. Di SQL rumusnya SUM(qty) dibagi COUNT(DISTINCT order_id). Metrik ini nunjukin seberapa banyak barang yang pelanggan beli sekali belanja, dan jadi ukuran utama buat menilai efek bundling dan cross-sell. Bedain dua hal: jumlah item total pakai kolom qty, dan jumlah produk unik pakai COUNT baris. Buat data yang miring, cek median di samping rata-rata biar nggak ketipu order borongan yang besar.

Ukuran keranjang belanja atau basket size adalah rata-rata jumlah item dalam satu order. Di SQL, rumus dasarnya total item dibagi jumlah order unik: SUM(qty) / COUNT(DISTINCT order_id).

Metrik ini nunjukin seberapa banyak barang yang pelanggan ambil sekali belanja. Dia pasangan alami dari average order value, tapi ngukur jumlah barang, bukan nilai uang. Naikin basket size artinya tiap pelanggan bawa pulang lebih banyak tanpa kamu perlu nambah pembeli baru.

Di bawah ini cara ngitungnya di SQL, dari rumus dasar sampai distribusi dan per channel, plus jebakan qty vs produk unik yang sering bikin angka salah arti.

Apa itu ukuran keranjang belanja?

Basket size adalah rata-rata jumlah barang yang dibeli dalam satu order. Hitungannya total item dibagi jumlah transaksi unik dalam periode tertentu. Kalau sebulan ada 5.000 item terjual dari 2.000 order, basket size kamu 2,5 item per order.

Angka ini kepakai buat ngukur efek strategi yang dorong orang beli lebih banyak sekali datang. Bundling, cross-sell, promo beli banyak. Semua itu targetnya naikin basket size. Kalau kampanye jalan tapi basket size datar, berarti belum ngefek.

Basket size sering dibaca bareng average order value. Aku bahas AOV terpisah di menghitung average order value di SQL, dan definisi ringkasnya ada di glossary average order value.

Gimana rumus basket size dasar di SQL?

Anggap kamu punya tabel item_transaksi dengan satu baris per item dalam order. Kolomnya order_id, produk, dan qty. Rumusnya langsung.

SELECT
  ROUND(SUM(qty) * 1.0
        / COUNT(DISTINCT order_id), 2)   AS rata_item_per_order,
  ROUND(COUNT(*) * 1.0
        / COUNT(DISTINCT order_id), 2)   AS rata_produk_unik_per_order
FROM item_transaksi;

Query ini ngasih dua angka sekaligus. Yang pertama jumlah item total, ngitung kuantitas. Yang kedua jumlah produk unik, ngitung berapa jenis produk berbeda. Bedanya penting, dan aku jelasin di bagian berikutnya.

Perhatikan * 1.0 lagi. Tanpa itu, bagi dua integer bisa motong desimal dan basket size kamu keliatan bulat padahal aslinya nggak. Dasar COUNT ada di fungsi COUNT.

Apa beda jumlah item dan jumlah produk unik?

Ini sumber kebingungan yang sering. Bayangin satu order beli 3 sabun merek sama plus 1 sampo. Jumlah item-nya 4, karena ngitung total kuantitas. Jumlah produk uniknya 2, karena cuma ada dua jenis produk.

UkuranCara hitungContoh order tadi
Jumlah itemSUM(qty)4
Jumlah produk unikCOUNT baris2

Dua-duanya valid, tapi jawab pertanyaan beda. Jumlah item cocok buat ngukur volume barang keluar. Jumlah produk unik cocok buat ngukur seberapa beragam belanjaan, yang lebih relevan buat efek cross-sell. Tentuin mana yang kamu maksud sebelum lapor.

Gimana cara lihat rata-rata dan median basket size?

Rata-rata sederhana gampang ketarik order borongan. Buat gambaran yang lebih jujur, agregasi dulu per order, baru hitung rata-rata dan mediannya.

WITH per_order AS (
  SELECT
    order_id,
    SUM(qty) AS total_item
  FROM item_transaksi
  GROUP BY order_id
)
SELECT
  ROUND(AVG(total_item), 2)                                        AS rata_basket,
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_item)          AS median_basket,
  MAX(total_item)                                                  AS basket_terbesar
FROM per_order;

CTE per_order ngerangkum tiap order jadi satu baris dengan total itemnya. Di luar, AVG dan PERCENTILE_CONT ngitung rata-rata dan median. Kalau median jauh di bawah rata-rata, berarti ada order besar yang narik rata-rata. Dasar rata-rata ada di fungsi AVG.

Lihat distribusi ukuran keranjang

Angka rata-rata doang nyembunyiin pola. Yang lebih berguna: berapa persen order cuma 1 item, berapa yang 2-3, dan seterusnya. Kelompokin pakai CASE.

WITH per_order AS (
  SELECT
    order_id,
    SUM(qty) AS total_item
  FROM item_transaksi
  GROUP BY order_id
)
SELECT
  CASE
    WHEN total_item = 1 THEN '1 item'
    WHEN total_item BETWEEN 2 AND 3 THEN '2-3 item'
    WHEN total_item BETWEEN 4 AND 6 THEN '4-6 item'
    ELSE '7+ item'
  END                          AS kelompok,
  COUNT(*)                     AS jumlah_order
FROM per_order
GROUP BY 1
ORDER BY 1;

Distribusi ini yang beneran ngasih arah keputusan. Kalau ternyata separo order cuma beli 1 item, peluang terbesarnya bukan bikin order besar jadi lebih besar, tapi dorong pembeli tunggal beli satu barang tambahan.

Contoh kasus: basket size toko_berkah

Data 6 bulan toko_berkah online: 8.400 order, 26.900 item terjual. Semua angka di bawah dari dataset ngulikdata.

Basket size rata-ratanya keluar di 3,2 item per order. Kelihatan sehat. Tapi median-nya cuma 2 item, dan itu tanda distribusinya miring.

Waktu aku lihat distribusinya, ketahuan gambaran sebenernya.

KelompokJumlah orderPersentase
1 item3.70044%
2-3 item2.90035%
4-6 item1.30015%
7+ item5006%

Ternyata 44% order cuma beli 1 item. Hampir separo. Rata-rata 3,2 tadi ketarik ke atas sama 6% order borongan yang isinya 7 item lebih.

Keputusan yang berubah: tim tadinya mau bikin paket bundling isi 5 produk buat naikin basket. Tapi bundling besar itu ngincer segmen yang udah beli banyak, cuma 21% order. Setelah lihat distribusi, fokusnya digeser ke cross-sell sederhana di halaman checkout buat 44% pembeli tunggal. Dorong dari 1 ke 2 item di kelompok terbesar itu efeknya jauh lebih gede.

Pecah basket size per channel

Channel yang beda sering punya pola keranjang yang beda. Order dari aplikasi bisa lebih besar dari order WhatsApp, atau sebaliknya. Gabung sama tabel transaksi buat pecah per channel.

SELECT
  t.channel,
  ROUND(SUM(i.qty) * 1.0
        / COUNT(DISTINCT i.order_id), 2)   AS rata_item_per_order
FROM item_transaksi i
JOIN transaksi t ON i.order_id = t.order_id
GROUP BY t.channel
ORDER BY rata_item_per_order DESC;

Dasar JOIN dan GROUP BY buat query kayak gini ada di GROUP BY dan HAVING.

Kesalahan umum

Ketuker qty dan jumlah produk unik. SUM(qty) ngitung total barang, COUNT baris ngitung jenis produk. Salah pilih bikin angka salah arti.

Bagi pakai COUNT(*), bukan COUNT(DISTINCT order_id). Di data level item, COUNT(*) itu jumlah baris, bukan jumlah order. Basket size kamu jadi selalu 1.

Cuma lihat rata-rata. Tanpa distribusi, kamu nggak tahu kalau separo order ternyata pembeli tunggal. Selalu cek sebarannya.

Lupa filter order batal. Order yang dibatalin atau di-refund tetap punya baris item. Filter dulu berdasarkan status biar basket size-nya bersih.

Lupa kali 1.0. Bagi dua integer bisa motong desimal. Basket size 2,7 bisa keluar jadi 2. Paksa desimal.

FAQ

Apa itu ukuran keranjang belanja (basket size)?

Ukuran keranjang belanja atau basket size adalah rata-rata jumlah barang yang dibeli dalam satu order. Cara hitungnya total item dibagi jumlah transaksi unik. Kalau dalam sebulan ada 5.000 item terjual dari 2.000 order, basket size kamu 2,5 item per order. Metrik ini nunjukin kebiasaan belanja pelanggan dan dipakai buat ngukur efek strategi bundling, cross-sell, dan promo beli banyak.

Gimana rumus basket size di SQL?

Rumus dasarnya SUM(qty) dibagi COUNT(DISTINCT order_id) kalau kamu punya kolom kuantitas per item. Pakai COUNT(DISTINCT order_id) buat pembagi supaya satu order dihitung sekali walaupun punya banyak baris item. Tambahin kali 1.0 supaya hasilnya nggak dipotong jadi bilangan bulat, dan ROUND biar rapi. Kalau mau lihat sebaran, agregasi dulu per order lalu hitung rata-rata dan mediannya.

Apa beda jumlah item dan jumlah produk unik per order?

Jumlah item ngitung total kuantitas, jadi beli 3 sabun yang sama kehitung 3 item. Jumlah produk unik ngitung berapa jenis produk berbeda, jadi 3 sabun sama kehitung 1 produk. Di SQL, jumlah item pakai SUM(qty), sementara jumlah produk unik pakai COUNT baris atau COUNT(DISTINCT produk). Dua-duanya berguna, tapi jangan ketuker karena artinya beda buat keputusan bisnis.

Kenapa perlu lihat distribusi, bukan cuma rata-rata basket size?

Karena rata-rata bisa nyembunyiin pola penting. Basket size rata-rata 3 item kedengeran sehat, tapi bisa jadi mayoritas order cuma beli 1 item sementara segelintir order borongan narik rata-rata ke atas. Distribusi ngasih tahu berapa persen order yang cuma 1 item, berapa yang 2-3, dan seterusnya. Dari situ kamu tahu apakah masalahnya banyak pembeli tunggal yang perlu didorong.

Gimana cara naikin ukuran keranjang belanja?

Tiga cara umum: bundling produk yang sering dibeli bareng jadi satu paket, cross-sell produk pelengkap pas checkout, dan promo minimum belanja kayak gratis ongkir di atas jumlah tertentu. Sebelum jalanin, ukur dulu basket size baseline pakai SQL dan cek distribusinya. Fokus dorong order 1 item jadi 2 item biasanya lebih gampang dan berdampak besar dibanding ngejar order yang udah besar jadi lebih besar.

Penutup

Yang perlu kamu bawa soal basket size:

  • Rumusnya SUM(qty) dibagi COUNT(DISTINCT order_id), jangan bagi pakai jumlah baris
  • Bedain jumlah item (qty) dan jumlah produk unik, artinya beda
  • Cek distribusi, bukan cuma rata-rata, biar tahu berapa persen pembeli tunggal

Coba jalanin query distribusi di data kamu, terus lihat berapa persen order yang cuma 1 item. Angka itu biasanya nunjukin peluang paling gede. Latihan query kayak gini bisa kamu lanjut di NgulikSQL, dan referensi fungsi agregat ada di dokumentasi PostgreSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore