Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
    • Data & AI
      • Data Analyst
      • Data Scientist
      • AI Engineer
      • Data Engineer
      • Business Intelligence (BI) Specialist
    • Infrastruktur & Keamanan
      • Network Engineer
      • System Engineer
      • DevOps Engineer
      • Security Engineer
      • Cloud Engineer
    • Programming & Web Development
      • Web & App Developer
      • Web Developer
      • WordPress Developer
      • Mobile Developer
    • Spesialisasi
      • Blockchain Engineer
      • IOT Engineer
      • Digital Marketing Specialist
  • Elearning
  • Blog
  • Portfolio
Daftar
Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
    • Data & AI
      • Data Analyst
      • Data Scientist
      • AI Engineer
      • Data Engineer
      • Business Intelligence (BI) Specialist
    • Infrastruktur & Keamanan
      • Network Engineer
      • System Engineer
      • DevOps Engineer
      • Security Engineer
      • Cloud Engineer
    • Programming & Web Development
      • Web & App Developer
      • Web Developer
      • WordPress Developer
      • Mobile Developer
    • Spesialisasi
      • Blockchain Engineer
      • IOT Engineer
      • Digital Marketing Specialist
  • Elearning
  • Blog
  • Portfolio

Mencari Produk yang Sering Dibeli Bersamaan Menggunakan SQL

  • September 18, 2026
  • oleh Avrillia Zahra Khoirun Nisa

Produk yang sering dibeli bersamaan dapat memberikan gambaran mengenai pola pembelian pelanggan. Informasi ini dapat membantu bisnis melihat kombinasi produk yang memiliki hubungan dalam satu transaksi, misalnya sebagai bahan pertimbangan untuk cross-selling, product bundling, atau rekomendasi produk.

Data transaksi yang hanya menunjukkan daftar barang secara terpisah akan sulit digunakan untuk melihat hubungan tersebut. Dengan mengelompokkan produk berdasarkan transaksi, kita dapat mengetahui pasangan produk yang paling sering muncul bersama. SQL dapat digunakan untuk melakukan proses tersebut tanpa harus memeriksa transaksi satu per satu.

Mengapa Produk yang Dibeli Bersamaan Perlu Dianalisis?

Pelanggan sering membeli lebih dari satu produk dalam satu transaksi. Ketika pola tersebut terjadi berulang kali, data dapat menunjukkan kombinasi produk yang cukup sering muncul bersama.

Sebagai contoh, jika bread dan milk berkali-kali berada dalam transaksi yang sama, kombinasi tersebut dapat menjadi informasi tambahan bagi bisnis. Namun, frekuensi pembelian bersama tidak berarti bahwa pembelian satu produk menyebabkan pembelian produk lainnya.

Analisis ini juga berbeda dari mencari produk terlaris. Produk terlaris berfokus pada jumlah penjualan suatu produk, sedangkan analisis ini berfokus pada hubungan antarproduk dalam transaksi yang sama.

Dataset yang Digunakan

Dataset yang digunakan adalah Groceries – Groceries, yang berisi data transaksi pembelian bahan kebutuhan sehari-hari.

Struktur dataset memiliki satu baris untuk setiap transaksi. Produk dalam transaksi tersebut disimpan pada beberapa kolom seperti Item 1, Item 2, Item 3, dan seterusnya.

Contoh sederhananya:

3tropical fruityogurtcoffee
2twhole milkpastry
4sausagewhole milkrolls/buns

Kolom Item(s) menunjukkan jumlah item dalam transaksi, sedangkan kolom Item 1 sampai kolom item berikutnya berisi produk yang dibeli.

Format seperti ini cocok untuk menunjukkan konsep market basket analysis, tetapi perlu diubah terlebih dahulu agar produk berada dalam satu kolom sebelum dianalisis dengan SQL.

Bagaimana Mengubah Struktur Data?

Karena satu transaksi tersebar pada banyak kolom, langkah pertama adalah membuat tabel transaksi dan memindahkan setiap item menjadi satu baris.

Misalnya data awal:

Transaction IDItem 1Item 2Item 3
1breadmilkcoffee
2breadbutter
3milkcoffeesugar

Setelah diubah, bentuk datanya menjadi:

Transaction IDProduct
1bread
1milk
1coffee
2bread
2butter
3milk
3coffee
3sugar

Format kedua lebih mudah digunakan untuk mencari pasangan produk dengan SQL.

Bagaimana Menyiapkan Tabel untuk SQL?

Setelah data diubah menjadi format transaksi dan produk, kita dapat menggunakan tabel seperti berikut:

  • Buat database terlebih dahulu
  • Gunakan database yang sudah dibuat lalu impor dataset groceries-groceries.csv ke database
  • Lalu cek struktur tabel
DESCRIBE groceries_groceries;

Artinya, satu baris mewakili satu transaksi, sedangkan produk-produk dalam transaksi tersebut tersebar di Item 1 sampai Item 32.

  • Tambahkan ID transaksi untuk tabel groceries_groceries
ALTER TABLE groceries_groceries
ADD COLUMN transaction_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
  • Setelah itu cek
SELECT transaction_id, `Item 1`, `Item 2`, `Item 3`
FROM groceries_groceries
LIMIT 10;
  • Buat tabel baru
DROP TABLE IF EXISTS grocery_items;

CREATE TABLE grocery_items (
    transaction_id INT NOT NULL,
    product VARCHAR(100) NOT NULL
);
  • Masukkan data data product ke tabel grocery_items

Kemudian Item 1 sampai Item 32 dimasukkan ke tabel tersebut menggunakan UNION ALL

INSERT INTO grocery_items (transaction_id, product)

SELECT transaction_id, TRIM(`Item 1`)
FROM groceries_groceries
WHERE `Item 1` IS NOT NULL AND TRIM(`Item 1`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 2`)
FROM groceries_groceries
WHERE `Item 2` IS NOT NULL AND TRIM(`Item 2`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 3`)
FROM groceries_groceries
WHERE `Item 3` IS NOT NULL AND TRIM(`Item 3`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 4`)
FROM groceries_groceries
WHERE `Item 4` IS NOT NULL AND TRIM(`Item 4`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 5`)
FROM groceries_groceries
WHERE `Item 5` IS NOT NULL AND TRIM(`Item 5`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 6`)
FROM groceries_groceries
WHERE `Item 6` IS NOT NULL AND TRIM(`Item 6`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 7`)
FROM groceries_groceries
WHERE `Item 7` IS NOT NULL AND TRIM(`Item 7`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 8`)
FROM groceries_groceries
WHERE `Item 8` IS NOT NULL AND TRIM(`Item 8`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 9`)
FROM groceries_groceries
WHERE `Item 9` IS NOT NULL AND TRIM(`Item 9`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 10`)
FROM groceries_groceries
WHERE `Item 10` IS NOT NULL AND TRIM(`Item 10`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 11`)
FROM groceries_groceries
WHERE `Item 11` IS NOT NULL AND TRIM(`Item 11`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 12`)
FROM groceries_groceries
WHERE `Item 12` IS NOT NULL AND TRIM(`Item 12`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 13`)
FROM groceries_groceries
WHERE `Item 13` IS NOT NULL AND TRIM(`Item 13`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 14`)
FROM groceries_groceries
WHERE `Item 14` IS NOT NULL AND TRIM(`Item 14`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 15`)
FROM groceries_groceries
WHERE `Item 15` IS NOT NULL AND TRIM(`Item 15`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 16`)
FROM groceries_groceries
WHERE `Item 16` IS NOT NULL AND TRIM(`Item 16`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 17`)
FROM groceries_groceries
WHERE `Item 17` IS NOT NULL AND TRIM(`Item 17`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 18`)
FROM groceries_groceries
WHERE `Item 18` IS NOT NULL AND TRIM(`Item 18`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 19`)
FROM groceries_groceries
WHERE `Item 19` IS NOT NULL AND TRIM(`Item 19`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 20`)
FROM groceries_groceries
WHERE `Item 20` IS NOT NULL AND TRIM(`Item 20`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 21`)
FROM groceries_groceries
WHERE `Item 21` IS NOT NULL AND TRIM(`Item 21`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 22`)
FROM groceries_groceries
WHERE `Item 22` IS NOT NULL AND TRIM(`Item 22`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 23`)
FROM groceries_groceries
WHERE `Item 23` IS NOT NULL AND TRIM(`Item 23`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 24`)
FROM groceries_groceries
WHERE `Item 24` IS NOT NULL AND TRIM(`Item 24`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 25`)
FROM groceries_groceries
WHERE `Item 25` IS NOT NULL AND TRIM(`Item 25`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 26`)
FROM groceries_groceries
WHERE `Item 26` IS NOT NULL AND TRIM(`Item 26`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 27`)
FROM groceries_groceries
WHERE `Item 27` IS NOT NULL AND TRIM(`Item 27`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 28`)
FROM groceries_groceries
WHERE `Item 28` IS NOT NULL AND TRIM(`Item 28`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 29`)
FROM groceries_groceries
WHERE `Item 29` IS NOT NULL AND TRIM(`Item 29`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 30`)
FROM groceries_groceries
WHERE `Item 30` IS NOT NULL AND TRIM(`Item 30`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 31`)
FROM groceries_groceries
WHERE `Item 31` IS NOT NULL AND TRIM(`Item 31`) <> ''

UNION ALL

SELECT transaction_id, TRIM(`Item 32`)
FROM groceries_groceries
WHERE `Item 32` IS NOT NULL AND TRIM(`Item 32`) <> '';
  • Cek hasilnya
SELECT *
FROM grocery_items
LIMIT 20;

Bagaimana Mencari Produk yang Dibeli Bersamaan?

Setelah data berada dalam format transaction_id dan product, langkah berikutnya adalah mencari pasangan produk yang muncul dalam transaksi yang sama. Untuk melakukan hal tersebut, SQL dapat menggunakan self JOIN, yaitu menggabungkan sebuah tabel dengan tabel itu sendiri.

Pada analisis ini, satu tabel digunakan sebagai a dan salinannya sebagai b. Keduanya kemudian dicocokkan berdasarkan transaction_id sehingga produk yang berasal dari transaksi yang sama dapat dibandingkan.

Gunakan query berikut:

SELECT a.product AS product_1, b.product AS product_2, COUNT(DISTINCT a.transaction_id) AS jumlah_transaksi FROM grocery_items a JOIN grocery_items b ON a.transaction_id = b.transaction_id AND atransaksi DESC LIMIT 10;

Query tersebut menghasilkan daftar pasangan produk yang paling sering muncul dalam transaksi yang sama.

Mengapa Menggunakan Self JOIN?

Bagian:

FROM grocery_items a
JOIN grocery_items b

digunakan untuk membandingkan produk dengan produk lainnya dalam tabel yang sama. Tabel diberi alias a dan b agar setiap baris produk dapat dibandingkan dengan baris produk lainnya.

Kondisi:

ON a.transaction_id = b.transaction_id

memastikan bahwa kedua produk berasal dari transaksi yang sama.

Kemudian terdapat kondisi:

AND a.product < b.product

Kondisi tersebut digunakan untuk menghindari pasangan yang sama muncul dua kali. Misalnya, pasangan bread dan whole milk cukup ditampilkan sekali dan tidak perlu muncul kembali sebagai whole milk dan bread.

Sementara itu:

ORDER BY jumlah_transaksi DESC

Mau Kuasai Mencari Produk yang Sering Dibeli Bersamaan Menggunakan SQL Sampai Bisa Praktik Langsung?

Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.

Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →

sehingga pasangan dengan jumlah kemunculan tertinggi berada di bagian atas. LIMIT 10 kemudian membatasi hasil menjadi 10 pasangan produk.

Bagaimana Membaca Hasil Analisis?

Query sebelumnya menghasilkan 10 pasangan produk yang paling sering muncul dalam transaksi yang sama. Hasil aktual dari dataset Groceries adalah sebagai berikut:

Produk 1Produk 2Jumlah Transaksi
other vegetableswhole milk736
rolls/bunswhole milk557
whole milkyogurt551
root vegetableswhole milk481
other vegetablesroot vegetables466
other vegetablesyogurt427
other vegetablesrolls/buns419
tropical fruitwhole milk416
sodawhole milk394
rolls/bunssoda377

Hasil tersebut menunjukkan bahwa other vegetables dan whole milk merupakan pasangan yang paling sering muncul secara bersamaan dalam dataset, dengan 736 transaksi.

Pasangan berikutnya adalah rolls/buns dan whole milk dengan 557 transaksi, kemudian whole milk dan yogurt dengan 551 transaksi. Beberapa pasangan lainnya juga memiliki frekuensi kemunculan yang cukup tinggi, seperti root vegetables dan whole milk sebanyak 481 transaksi serta other vegetables dan root vegetables sebanyak 466 transaksi.

Dari hasil tersebut terlihat bahwa whole milk muncul pada beberapa pasangan dengan jumlah transaksi yang tinggi. Hal ini menunjukkan bahwa produk tersebut sering ditemukan bersama berbagai produk lain dalam transaksi pada dataset.

Namun, hasil ini tidak berarti bahwa whole milk menyebabkan pelanggan membeli produk-produk tersebut. Analisis yang dilakukan hanya menghitung kemunculan dua produk dalam transaksi yang sama.

Apa Perbedaan Hasil Ini dengan Analisis Produk Terlaris?

Analisis produk terlaris dan analisis produk yang dibeli bersamaan memiliki tujuan yang berbeda.

Analisis produk terlaris mencari produk berdasarkan jumlah penjualan secara individual. Sementara itu, query yang digunakan pada bagian ini mencari pasangan produk berdasarkan jumlah transaksi yang mengandung keduanya.

Sebagai contoh, hasil menunjukkan pasangan other vegetables dan whole milk sebanyak 736 transaksi. Angka tersebut bukan jumlah penjualan salah satu produk, tetapi jumlah transaksi yang mengandung kedua produk tersebut.

Perbedaan ini membuat analisis pasangan produk dapat memberikan sudut pandang tambahan bagi bisnis. Jika analisis produk terlaris menjawab pertanyaan “Produk apa yang paling banyak terjual?”, maka analisis ini membantu menjawab “Produk apa yang sering muncul bersama dalam satu transaksi?”.

Apa yang Bisa Dilakukan dengan Hasil Analisis?

Pola pembelian bersama dapat digunakan sebagai salah satu sumber informasi dalam pengambilan keputusan bisnis. Beberapa penerapannya antara lain:

Cross-Selling

Pasangan produk yang sering muncul bersama dapat digunakan sebagai referensi untuk menawarkan produk tambahan kepada pelanggan.

Sebagai contoh, pola antara whole milk dan other vegetables dapat menjadi salah satu data yang dipertimbangkan ketika sistem menawarkan produk tambahan kepada pelanggan yang sedang memilih salah satu dari kedua produk tersebut.

Product Bundling

Data transaksi juga dapat membantu bisnis menemukan kandidat kombinasi produk untuk dibuat menjadi paket. Pasangan dengan frekuensi kemunculan tinggi dapat dianalisis lebih lanjut sebelum digunakan sebagai dasar pembuatan bundling.

Rekomendasi Produk

Pola pembelian bersama dapat menjadi salah satu sumber data untuk sistem rekomendasi. Ketika pelanggan memilih suatu produk, sistem dapat menggunakan riwayat transaksi untuk menemukan produk lain yang sering muncul bersamanya.

Analisis Penempatan Produk

Pada toko fisik maupun katalog digital, informasi mengenai produk yang sering dibeli bersama dapat menjadi pertimbangan dalam mengatur penempatan atau pengelompokan produk.

Apa yang Perlu Diperhatikan?

Frekuensi transaksi belum cukup untuk menyimpulkan bahwa dua produk memiliki hubungan yang kuat. Produk dengan jumlah transaksi tinggi dapat muncul bersama hanya karena produk tersebut memang populer atau sering dibeli secara umum.

Oleh karena itu, analisis dapat dikembangkan menggunakan metrik Market Basket Analysis, seperti support, confidence, dan lift. Metrik tersebut dapat memberikan informasi yang lebih mendalam mengenai seberapa kuat hubungan antara dua produk.

Pada analisis ini, hasil yang diperoleh masih berfokus pada frekuensi kemunculan pasangan produk dalam transaksi. Dengan demikian, hasil tersebut lebih tepat digunakan sebagai langkah awal untuk menemukan pola yang menarik sebelum dilakukan analisis lanjutan.

Kesimpulan

SQL dapat digunakan tidak hanya untuk mengetahui produk yang paling banyak terjual, tetapi juga untuk menemukan pola produk yang sering muncul dalam transaksi yang sama. Pada dataset Groceries, struktur data Item 1 sampai Item 32 terlebih dahulu diubah menjadi format transaction_id dan product agar dapat dianalisis menggunakan self JOIN.

Berdasarkan hasil aktual, pasangan other vegetables dan whole milk muncul bersama dalam 736 transaksi, disusul rolls/buns dan whole milk dengan 557 transaksi, serta whole milk dan yogurt dengan 551 transaksi.

Hasil tersebut menunjukkan adanya pola kemunculan bersama antarproduk yang dapat menjadi informasi tambahan bagi bisnis. Data tersebut dapat digunakan sebagai dasar untuk mengeksplorasi peluang cross-selling, product bundling, rekomendasi produk, maupun pengelompokan produk.

Namun, frekuensi kemunculan bersama belum menunjukkan kekuatan hubungan antarproduk secara keseluruhan. Untuk mendapatkan analisis yang lebih mendalam, proses berikutnya dapat dikembangkan menggunakan support, confidence, dan lift dalam Market Basket Analysis.

Sumber Dataset: Kaggle

Penulis:

Avrillia Zahra Khoirun Nisa

Mau Kuasai Mencari Produk yang Sering Dibeli Bersamaan Menggunakan SQL Sampai Bisa Praktik Langsung?

Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.

Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →

Tags: Business AnalayticsBusiness IntelligenceCustomer BehaviourCustomer Insightdata analysisData AnalyticsDatabasedatasetMariaDBMySQLRetail AnalyticsRetail datasqlSQL analysisSQL QueryTransaction AnalysisTransaction Data
Previous Post

Post comment

Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Mencari Produk yang Sering Dibeli Bersamaan Menggunakan SQL
  • Memindahkan Aplikasi PHP ke Cloud: Studi Kasus Deployment BloodConnect ke Hosting Publik
  • Kenapa Query SQL Kamu Ribet Banget Cuma untuk Cari “Top 3 per Kategori”? Kenalan dengan Window Function
  • Aplikasi Bisa Berjalan, Tapi Tidak Bisa Diakses? Cek dengan Wireshark
  • Tips Presentasi Final Project Data Analysis

Arsip

  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • September 2025
  • August 2025
  • July 2025
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016
  • February 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • May 2015
  • April 2015
  • March 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • May 2014
  • April 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • December 2011
  • November 2011

Tags

apache web server dns server kursus android kursus database kursus dns dan web server kursus dns server kursus ethical hacking kursus hacking kursus jaringan kursus jaringan linux Kursus Komputer kursus komputer di solo kursus komputer di solo / surakarta kursus komputer di surakarta kursus linux Kursus Linux Forensics kursus linux networking kursus linux security kursus linux server kursus mikrotik kursus networking kursus network security kursus php Kursus PHP dan MySQL kursus php mysql kursus proxy kursus security kursus ubuntu kursus ubuntu server kursus web kursus web security kursus web server kursus wordpress kursus wordpress theme linux MySQL pelatihan komputer di solo PHP python security training komputer training komputer di solo tutorial php ubuntu wordpress

© Edusoft Center - Kursus Komputer di Solo | 2010 - 2026 | Privacy Policy | Site Map | Portfolio Magang | Butuh tim kami langsung yang mengerjakan? Lihat layanan implementasi →

All Right Reserved

WhatsApp us