Dataset SDM terinspirasi dari dataset IBM HR Analytics Employee Attrition — salah satu dataset HR paling banyak diteliti di dunia nyata. Mencakup data karyawan, departemen, riwayat gaji, penilaian kinerja, dan data attrition (keluar/resign). Ideal untuk analisis retensi karyawan, prediksi turnover, dan optimasi kompensasi.
SQLite · hr_analytics5 tabel~320 barisWINDOW FUNCTIONCTESUBQUERYGROUP BY + HAVING
📋 departemen
Kolom
Tipe
Keterangan
idPK
INTEGER
ID departemen
nama
TEXT
Nama departemen (Sales, R&D, HR, dll.)
divisi
TEXT
Divisi induk
👤 karyawan
Kolom
Tipe
Keterangan
idPK
INTEGER
Employee ID
nama
TEXT
Nama lengkap
id_departemenFK
INTEGER
→ departemen.id
jabatan
TEXT
Job Role (Manager, Analyst, dll.)
jenis_kelamin
TEXT
M / F
usia
INTEGER
Usia saat ini
tahun_bergabung
INTEGER
Tahun masuk perusahaan
status
TEXT
aktif / resign / pensiun
💰 gaji
Kolom
Tipe
Keterangan
idPK
INTEGER
ID record gaji
id_karyawanFK
INTEGER
→ karyawan.id
tahun
INTEGER
Tahun berlaku gaji
gaji_pokok
REAL
Gaji pokok per bulan (IDR)
bonus
REAL
Bonus tahunan (IDR)
⭐ kinerja
Kolom
Tipe
Keterangan
idPK
INTEGER
ID record kinerja
id_karyawanFK
INTEGER
→ karyawan.id
tahun
INTEGER
Tahun penilaian
skor
REAL
Skor kinerja 1–5
predikat
TEXT
Needs Improvement / Good / Excellent
🏋 pelatihan
Kolom
Tipe
Keterangan
idPK
INTEGER
ID pelatihan
id_karyawanFK
INTEGER
→ karyawan.id
nama_pelatihan
TEXT
Nama program pelatihan
tahun
INTEGER
Tahun mengikuti pelatihan
jam
INTEGER
Durasi pelatihan (jam)
sertifikat
INTEGER
1 = bersertifikat, 0 = tidak
🔗
karyawan.id_departemen→departemen.id
Banyak karyawan bisa berada di satu departemen (Many-to-One)
🔗
gaji.id_karyawan→karyawan.id
Setiap karyawan memiliki riwayat gaji per tahun (One-to-Many)
🔗
kinerja.id_karyawan→karyawan.id
Setiap karyawan dinilai kinerjanya setiap tahun (One-to-Many)
🔗
pelatihan.id_karyawan→karyawan.id
Setiap karyawan bisa mengikuti banyak pelatihan (One-to-Many)
Rank Gaji Karyawan per DepartemenAdvanced
SELECT k.nama, d.nama AS departemen, g.gaji_pokok,
RANK() OVER (PARTITION BY k.id_departemen
ORDER BY g.gaji_pokok DESC) AS rank_gaji
FROM karyawan k
JOIN departemen d ON k.id_departemen = d.id
JOIN gaji g ON g.id_karyawan = k.id
WHERE g.tahun = 2023ORDER BY departemen, rank_gaji
Analisis Attrition: Resign Rate per DepartemenExpert
WITH dept_stats AS (
SELECT d.nama AS departemen,
COUNT(*) AS total_karyawan,
SUM(CASE WHEN k.status = 'resign'THEN1ELSE0END) AS jumlah_resign
FROM karyawan k
JOIN departemen d ON k.id_departemen = d.id
GROUP BY d.id
)
SELECT departemen, total_karyawan, jumlah_resign,
ROUND(jumlah_resign * 100.0 / total_karyawan, 1) AS resign_rate_pct
FROM dept_stats
ORDER BY resign_rate_pct DESC
Karyawan High-Performer tapi Gaji di Bawah Rata-rata DepartemenExpert
WITH avg_gaji_dept AS (
SELECT k.id_departemen,
AVG(g.gaji_pokok) AS avg_gaji
FROM gaji g JOIN karyawan k ON g.id_karyawan = k.id
WHERE g.tahun = 2023GROUP BY k.id_departemen
)
SELECT k.nama, d.nama AS departemen,
g.gaji_pokok, kn.skor, kn.predikat
FROM karyawan k
JOIN departemen d ON k.id_departemen = d.id
JOIN gaji g ON g.id_karyawan = k.id AND g.tahun = 2023JOIN kinerja kn ON kn.id_karyawan = k.id AND kn.tahun = 2023JOIN avg_gaji_dept agd ON agd.id_departemen = k.id_departemen
WHERE kn.predikat = 'Excellent'AND g.gaji_pokok < agd.avg_gaji
ORDER BY g.gaji_pokok
Identifikasi departemen dan jabatan dengan resign rate tertinggi. Teknik yang sama dipakai Netflix, Google untuk mempertahankan talent.
💹
Compensation Benchmarking
Bandingkan gaji karyawan terhadap rata-rata departemen. Pola analisis ini umum di perusahaan konsultan McKinsey, Deloitte.
🎯
Performance vs Tenure Correlation
Analisis hubungan lama bekerja dengan skor kinerja — insight penting untuk program onboarding dan promosi.
📊
Training ROI Analysis
Ukur dampak jam pelatihan terhadap skor kinerja. Studi kasus riil di IBM dan SAP HR Analytics Division.
🔮
Gender Pay Gap Audit
Hitung selisih median gaji pria vs wanita per jabatan/departemen — kewajiban audit di perusahaan publik.
🌡
Headcount Forecasting
Proyeksi kebutuhan rekrutmen berdasarkan tren resign historis dan growth target perusahaan.
🛒
E-Commerce PenjualanRetail / E-CommerceAdvanced
Dataset transaksi e-commerce terinspirasi dari struktur data Tokopedia dan Brazilian E-Commerce (Olist) — salah satu dataset e-commerce paling populer di Kaggle. Mencakup tabel produk, pelanggan, pesanan, dan detail item. Ideal untuk analisis RFM, cohort retention, dan product affinity.
SQLite · penjualan4 tabel~180 barisJOIN MULTI-TABELAGGREGATE FUNCTIONSDATE FILTERINGRUNNING TOTAL
📦 produk
Kolom
Tipe
Keterangan
idPK
INTEGER
ID produk
nama
TEXT
Nama produk
kategori
TEXT
Kategori (Elektronik, Aksesoris, Komponen)
harga
REAL
Harga satuan (IDR)
stok
INTEGER
Stok tersedia
🧑 pelanggan
Kolom
Tipe
Keterangan
idPK
INTEGER
ID pelanggan
nama
TEXT
Nama toko / perusahaan
kota
TEXT
Kota asal
email
TEXT
Email kontak
🧾 pesanan
Kolom
Tipe
Keterangan
idPK
INTEGER
ID pesanan
id_pelangganFK
INTEGER
→ pelanggan.id
tanggal
TEXT
Tanggal pesanan (YYYY-MM-DD)
total
REAL
Total nilai pesanan (IDR)
📋 detail_pesanan
Kolom
Tipe
Keterangan
idPK
INTEGER
ID detail
id_pesananFK
INTEGER
→ pesanan.id
id_produkFK
INTEGER
→ produk.id
qty
INTEGER
Jumlah unit dibeli
harga_satuan
REAL
Harga pada saat transaksi (IDR)
🔗
pesanan.id_pelanggan→pelanggan.id
Satu pelanggan bisa memiliki banyak pesanan (One-to-Many)
🔗
detail_pesanan.id_pesanan→pesanan.id
Satu pesanan memiliki satu atau banyak item (One-to-Many)
🔗
detail_pesanan.id_produk→produk.id
Satu produk bisa muncul di banyak detail pesanan (One-to-Many)
RFM Recency: Hari Sejak Pesanan TerakhirAdvanced
SELECT p.nama AS pelanggan, p.kota,
MAX(ps.tanggal) AS last_order,
JULIANDAY('2024-04-01') - JULIANDAY(MAX(ps.tanggal)) AS hari_sejak
FROM pesanan ps
JOIN pelanggan p ON ps.id_pelanggan = p.id
GROUP BY p.id
ORDER BY hari_sejak ASC
Produk Terlaris dengan Running Total RevenueExpert
WITH produk_rev AS (
SELECT pr.nama, pr.kategori,
SUM(dp.qty * dp.harga_satuan) AS revenue
FROM detail_pesanan dp
JOIN produk pr ON dp.id_produk = pr.id
GROUP BY pr.id
)
SELECT nama, kategori, revenue,
SUM(revenue) OVER (ORDER BY revenue DESCROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS kumulatif
FROM produk_rev
ORDER BY revenue DESC
Klasifikasi pelanggan berdasarkan Recency, Frequency, Monetary — framework standar di tim data Tokopedia, Shopee.
📦
Inventory Management
Analisis produk mana yang paling cepat habis stok vs terlalu lama di gudang (slow-moving items).
📈
Revenue Trend Analysis
Hitung pertumbuhan revenue bulanan (MoM), identifikasi musim penjualan tertinggi / terendah.
🏆
Top Product Ranking
Ranking produk berdasarkan unit terjual dan revenue — dasar dari fitur "Terlaris" di marketplace manapun.
🎓
Akademik UniversitasPendidikanIntermediate
Dataset sistem informasi akademik perguruan tinggi terinspirasi dari Sistem Informasi Akademik (SIAKAD) universitas-universitas di Indonesia. Mencakup data mahasiswa, dosen, mata kuliah, dan nilai. Cocok untuk analisis prestasi akademik, beban mengajar dosen, dan distribusi nilai.
SQLite · akademik4 tabel~60 barisMULTI-JOINGROUP BY + HAVINGSUBQUERYAGGREGATE
🎓 mahasiswa
Kolom
Tipe
Keterangan
nimPK
TEXT
Nomor Induk Mahasiswa
nama
TEXT
Nama lengkap mahasiswa
program_studi
TEXT
Program studi (Teknik Informatika, dll.)
angkatan
INTEGER
Tahun angkatan masuk
ipk
REAL
Indeks Prestasi Kumulatif (0–4)
👨🏫 dosen
Kolom
Tipe
Keterangan
nipPK
TEXT
Nomor Induk Pegawai
nama
TEXT
Nama dosen
jabatan
TEXT
Jabatan akademik (Lektor, Profesor, dll.)
program_studi
TEXT
Program studi yang diampu
📘 mata_kuliah
Kolom
Tipe
Keterangan
kodePK
TEXT
Kode mata kuliah
nama
TEXT
Nama mata kuliah
sks
INTEGER
Jumlah SKS (2–4)
semester
INTEGER
Semester ke-berapa (1–8)
📝 nilai
Kolom
Tipe
Keterangan
idPK
INTEGER
ID record nilai
nimFK
TEXT
→ mahasiswa.nim
kode_mkFK
TEXT
→ mata_kuliah.kode
nilai
REAL
Nilai angka (0–100)
grade
TEXT
Grade huruf (A, B+, B, C+, C, D)
🔗
nilai.nim→mahasiswa.nim
Satu mahasiswa bisa memiliki banyak nilai (One-to-Many)
🔗
nilai.kode_mk→mata_kuliah.kode
Satu mata kuliah bisa diambil banyak mahasiswa (One-to-Many)
Distribusi Grade per Mata KuliahIntermediate
SELECT mk.nama AS mata_kuliah,
n.grade,
COUNT(*) AS jumlah,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER
(PARTITION BY mk.kode), 1) AS pct
FROM nilai n
JOIN mata_kuliah mk ON n.kode_mk = mk.kode
GROUP BY mk.kode, n.grade
ORDER BY mk.nama, n.grade
SELECT m.nama, m.program_studi, m.ipk,
ROUND(avg_prodi.avg_ipk, 2) AS rata_prodi
FROM mahasiswa m
JOIN (
SELECT program_studi, AVG(ipk) AS avg_ipk
FROM mahasiswa
GROUP BY program_studi
) avg_prodi ON m.program_studi = avg_prodi.program_studi
WHERE m.ipk > avg_prodi.avg_ipk
ORDER BY m.program_studi, m.ipk DESC
Dataset manajemen perpustakaan terinspirasi dari sistem ILS (Integrated Library System) seperti SLiMS (Senayan) yang digunakan ratusan perpustakaan di Indonesia. Mencakup koleksi buku, anggota, dan transaksi peminjaman. Cocok untuk memulai query JOIN dan analisis pola peminjaman.
Satu anggota bisa meminjam berkali-kali (One-to-Many)
🔗
peminjaman.id_buku→buku.id
Satu buku bisa dipinjam berkali-kali oleh anggota berbeda (One-to-Many)
Buku Paling Sering DipinjamIntermediate
SELECT b.judul, b.pengarang, b.kategori,
COUNT(p.id) AS total_pinjam
FROM buku b
LEFT JOIN peminjaman p ON b.id = p.id_buku
GROUP BY b.id
ORDER BY total_pinjam DESCLIMIT5
Keterlambatan Pengembalian (NULL = Masih Dipinjam)Intermediate
SELECT a.nama AS anggota, b.judul,
p.tanggal_pinjam,
COALESCE(p.tanggal_kembali, 'Belum dikembalikan') AS kembali,
CASEWHEN p.tanggal_kembali IS NULLTHENCAST(JULIANDAY('now') - JULIANDAY(p.tanggal_pinjam) AS INTEGER)
ELSE0ENDAS hari_terlambat
FROM peminjaman p
JOIN anggota a ON p.id_anggota = a.id
JOIN buku b ON p.id_buku = b.id
ORDER BY hari_terlambat DESC
Laporan jumlah peminjaman per bulan/kategori — standar report di SLiMS dan sistem perpustakaan digital.
⏰
Overdue Detection
Identifikasi peminjam yang belum mengembalikan buku beserta hitungan hari keterlambatan.
📚
Collection Analysis
Analisis koleksi buku mana yang kurang diminati (zero circulation) untuk keputusan pengadaan.
🛒
E-Commerce LanjutanMarketplaceAdvanced
6 Tabel~250 BarisMulti-SellerSQLite
Simulasi marketplace multi-seller skala menengah — seller, produk, pelanggan, transaksi, item, dan kategori. Data terinspirasi dari model analitik Tokopedia/Shopee dan dataset Olist Brazilian E-Commerce (Kaggle).
🏬 seller
id · nama_toko · kota · rating · bergabung · total_produk
📦 produk
id · id_seller · id_kategori · nama · harga · stok · terjual · rating · ulasan
🏷 kategori
id · nama · slug
👤 pelanggan
id · nama · kota · segmen · bergabung · total_pesanan · total_belanja
🧾 transaksi
id · id_pelanggan · tanggal · status · metode_bayar · ongkir · total
📋 item_transaksi
id · id_transaksi · id_produk · qty · harga_beli
produk→seller(id_seller)
produk→kategori(id_kategori)
transaksi→pelanggan(id_pelanggan)
item_transaksi→transaksi(id_transaksi)
item_transaksi→produk(id_produk)
Top-10 Produk Terlaris per Kategori
SELECT k.nama AS kategori, p.nama, p.terjual
FROM produk p JOIN kategori k ON p.id_kategori = k.id
ORDER BY p.terjual DESC LIMIT 10;
GMV per Bulan 2024
SELECT strftime('%Y-%m', tanggal) AS bulan,
COUNT(*) AS transaksi,
SUM(total) AS gmv
FROM transaksi WHERE status = 'selesai'
GROUP BY 1 ORDER BY 1;
Seller Performance
SELECT s.nama_toko, s.kota, s.rating,
COUNT(p.id) AS produk, SUM(p.terjual) AS total_terjual
FROM seller s JOIN produk p ON p.id_seller = s.id
GROUP BY s.id ORDER BY total_terjual DESC;
📈
Gross Merchandise Value
Hitung GMV bulanan dan analisis tren pertumbuhan transaksi — metrik utama platform marketplace.
🏅
Seller Ranking
Peringkatkan seller berdasarkan omset, rating, dan volume produk terjual — untuk fitur "Top Seller".
🛍
Customer Segmentation
Klasifikasi pelanggan (VIP/Premium/Regular) berdasarkan RFM — Recency, Frequency, Monetary value.
🏥
Kesehatan / SIMRSRumah SakitAdvanced
7 Tabel~200 BarisICD-10SQLite
Sistem Informasi Manajemen Rumah Sakit (SIMRS) — pasien, dokter, poli, kunjungan, diagnosa ICD-10, obat, dan resep. Data struktur mengikuti PerMenKes 82/2013 dan WHO ICD-10 classification.
🏨 poli
id · nama · kode
👨⚕️ dokter
id · nama · id_poli · spesialisasi · hari_praktik
🧑 pasien
id · no_rm · nama · jenis_kelamin · tgl_lahir · golongan_darah · asuransi · kota
📋 kunjungan
id · id_pasien · id_dokter · tanggal · tipe · diagnosa_icd10 · diagnosa_nama · biaya · status_bayar
💊 obat
id · nama · kategori · satuan · harga · stok
📄 resep
id · id_kunjungan · id_obat · jumlah · aturan_pakai
dokter→poli(id_poli)
kunjungan→pasien(id_pasien)
kunjungan→dokter(id_dokter)
resep→kunjungan(id_kunjungan)
resep→obat(id_obat)
10 Diagnosa Terbanyak (ICD-10)
SELECT diagnosa_icd10, diagnosa_nama,
COUNT(*) AS kasus
FROM kunjungan
GROUP BY diagnosa_icd10, diagnosa_nama
ORDER BY kasus DESC LIMIT 10;
Pendapatan per Poli
SELECT p.nama AS poli, COUNT(k.id) AS kunjungan,
SUM(k.biaya) AS total_pendapatan
FROM kunjungan k
JOIN dokter d ON k.id_dokter = d.id
JOIN poli p ON d.id_poli = p.id
GROUP BY p.id ORDER BY total_pendapatan DESC;
Pasien dengan Kunjungan Berulang
SELECT p.nama, p.asuransi,
COUNT(k.id) AS total_kunjungan,
SUM(k.biaya) AS total_biaya
FROM pasien p JOIN kunjungan k ON k.id_pasien = p.id
GROUP BY p.id HAVING total_kunjungan > 1
ORDER BY total_kunjungan DESC;
🏥
Disease Burden Analysis
Top 10 penyakit (ICD-10) yang paling sering didiagnosis — standar pelaporan RL3.1 Kemenkes RI.
💰
Revenue per Poli
Laporan pendapatan per poliklinik untuk perencanaan anggaran dan evaluasi kinerja unit.
💊
Formularium Obat
Analisis penggunaan obat terbanyak vs stok — mendukung manajemen farmasi dan pengadaan BPJS.
🎓
Pendidikan / Data SekolahPendidikanIntermediate
6 Tabel~200 BarisDAPODIKSQLite
Sistem data pendidikan terinspirasi DAPODIK Kemdikbud — sekolah, guru, siswa, mata pelajaran, nilai rapor, dan kehadiran. Cocok untuk analisis performa akademik dan evaluasi mutu pendidikan.
🏫 sekolah
id · nama · kota · jenjang · akreditasi · siswa
👩🏫 guru
id · nama · id_sekolah · mata_pelajaran · pendidikan · tahun_mengajar
🧑🎓 siswa
id · nis · nama · id_sekolah · kelas · jenis_kelamin · tgl_lahir
📚 mata_pelajaran
id · kode · nama · jenjang · kkm
📊 nilai
id · id_siswa · id_mapel · semester · tahun_ajaran · uts · uas · tugas · nilai_akhir · predikat
🗓 kehadiran
id · id_siswa · bulan · hadir · sakit · izin · alpha
guru→sekolah(id_sekolah)
siswa→sekolah(id_sekolah)
nilai→siswa(id_siswa)
nilai→mata_pelajaran(id_mapel)
kehadiran→siswa(id_siswa)
Rata-Rata Nilai per Mata Pelajaran
SELECT m.nama AS mapel, m.kkm,
ROUND(AVG(n.nilai_akhir),1) AS rata2,
COUNT(CASE WHEN n.nilai_akhir >= m.kkm THEN 1 END) AS lulus
FROM nilai n JOIN mata_pelajaran m ON n.id_mapel = m.id
GROUP BY m.id ORDER BY rata2 DESC;
Peringkat Siswa per Kelas
SELECT s.nama, s.kelas,
ROUND(AVG(n.nilai_akhir),1) AS rerata,
RANK() OVER (PARTITION BY s.kelas ORDER BY AVG(n.nilai_akhir) DESC) AS peringkat
FROM siswa s JOIN nilai n ON n.id_siswa = s.id
GROUP BY s.id ORDER BY s.kelas, peringkat;
Korelasi Kehadiran & Nilai
SELECT s.nama,
SUM(k.hadir) AS total_hadir,
ROUND(AVG(n.nilai_akhir),1) AS rerata_nilai
FROM siswa s
JOIN kehadiran k ON k.id_siswa = s.id
JOIN nilai n ON n.id_siswa = s.id
GROUP BY s.id ORDER BY total_hadir DESC;
📊
Analisis Rapor Sekolah
Hitung rata-rata nilai, persentase kelulusan KKM, dan identifikasi siswa perlu remedial — format standar Kemdikbud.
🎯
Deteksi Siswa At-Risk
Gabungkan data kehadiran rendah + nilai di bawah KKM untuk identifikasi siswa berisiko dropout.
🏆
Peringkat & Prestasi
Ranking siswa per kelas dan per sekolah — mendukung sistem penghargaan dan seleksi siswa berprestasi.
🏦
Keuangan / PerbankanPerbankanExpert
5 Tabel~300 BarisOJK/BISQLite
Simulasi core banking system — nasabah, rekening, pinjaman, dan transaksi. Struktur data mengikuti skema pelaporan Bank Indonesia (SLIK) dan OJK, dengan data terinspirasi Kaggle Credit Risk Dataset.
👤 nasabah
id · no_nasabah · nama · jenis_kelamin · tgl_lahir · pekerjaan · penghasilan_bulan · kota · rating_kredit
🏦 rekening
id · id_nasabah · no_rekening · jenis · saldo · dibuka · status
💸 transaksi
id · id_rekening · tanggal · jenis · keterangan · debet · kredit · saldo_akhir
📃 pinjaman
id · id_nasabah · no_pinjaman · jenis · jumlah_pokok · bunga_pa · tenor_bulan · tanggal_mulai · status · kolektibilitas
rekening→nasabah(id_nasabah)
transaksi→rekening(id_rekening)
pinjaman→nasabah(id_nasabah)
Analisis Kredit per Segmen Nasabah
SELECT n.rating_kredit, n.pekerjaan,
COUNT(p.id) AS total_pinjaman,
SUM(p.jumlah_pokok) AS total_exposure,
AVG(p.bunga_pa) AS rata_bunga
FROM pinjaman p JOIN nasabah n ON p.id_nasabah = n.id
GROUP BY n.rating_kredit, n.pekerjaan
ORDER BY total_exposure DESC;
Nasabah dengan Kewajiban Tinggi
SELECT n.nama, n.penghasilan_bulan,
SUM(p.jumlah_pokok) AS total_pinjaman,
ROUND(SUM(p.jumlah_pokok)/n.penghasilan_bulan,1) AS dsr_estimate
FROM nasabah n JOIN pinjaman p ON p.id_nasabah = n.id
WHERE p.status = 'Aktif'
GROUP BY n.id ORDER BY dsr_estimate DESC;
Mutasi Rekening Bulanan
SELECT strftime('%Y-%m', tanggal) AS bulan,
SUM(kredit) AS total_masuk,
SUM(debet) AS total_keluar,
COUNT(*) AS jumlah_tx
FROM transaksi GROUP BY 1 ORDER BY 1;
📉
Credit Risk Scoring
Analisis kolektibilitas pinjaman (kolek 1-5) dan Debt Service Ratio — metodologi standar OJK untuk NPL.
💳
Rekening Dormant Detection
Identifikasi rekening tidak aktif berdasarkan pola transaksi — penting untuk AML (Anti Money Laundering).
🏦
DPK (Dana Pihak Ketiga)
Total saldo tabungan, giro, dan deposito per segmen nasabah — laporan standar BI/OJK untuk bank pelapor.
Siap Eksplorasi Data?
Buka SQL Lab dan mulai menulis query langsung terhadap semua dataset di atas.