Menghitung Korelasi dan Regresi Linear di SQL: Panduan Lengkap
Blog/Tutorial SQL/Menghitung Korelasi dan Regresi Linear di SQL: Panduan Lengkap

Menghitung Korelasi dan Regresi Linear di SQL: Panduan Lengkap

BimaBima
·26 November 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Korelasi ngukur seberapa kuat dua kolom bergerak bareng, nilainya dari -1 sampai +1. Di PostgreSQL kamu hitung langsung pakai CORR(y, x). Buat regresi linear, REGR_SLOPE dan REGR_INTERCEPT ngasih kemiringan dan titik potong garis, sementara REGR_R2 ngasih seberapa cocok garisnya. Di database tanpa fungsi statistik kayak MySQL lama, korelasi tetap bisa dihitung manual pakai SUM dan COUNT dalam satu query.

Korelasi ngukur seberapa kuat dua kolom bergerak bareng, dan di SQL kamu bisa hitung langsung tanpa export ke Excel. Di PostgreSQL, satu fungsi udah cukup: CORR(y, x).

Buat regresi linear, ada keluarga fungsi REGR yang ngasih kemiringan garis, titik potong, dan seberapa cocok modelnya. Semua di dalam query, jalan di jutaan baris tanpa mindahin data ke mana-mana.

Di bawah ini cara ngitung korelasi dan regresi di SQL, dari fungsi bawaan PostgreSQL sampai rumus manual buat database yang nggak punya fungsi statistik.

Apa itu korelasi dan regresi linear?

Korelasi adalah angka dari -1 sampai +1 yang nunjukin seberapa kuat dua variabel bergerak bareng. Regresi linear nyari garis lurus terbaik yang ngewakilin hubungan itu, biar kamu bisa prediksi satu nilai dari nilai lainnya.

Bedanya gini. Korelasi cuma jawab "seberapa erat hubungannya?". Regresi jawab "kalau x naik segini, y kira-kira jadi berapa?". Definisi ringkasnya ada di glossary korelasi.

Korelasi +0.9 artinya dua kolom naik bareng dengan konsisten. Nilai -0.9 artinya satu naik, yang lain turun. Sekitar 0 artinya nggak ada pola garis lurus antara keduanya.

Gimana cara menghitung korelasi di SQL?

Di PostgreSQL dan BigQuery, pakai fungsi agregat CORR. Dia nerima dua kolom dan ngeluarin koefisien korelasi Pearson dalam satu angka.

SELECT
  ROUND(CORR(omzet, biaya_iklan)::numeric, 3) AS korelasi
FROM penjualan_harian;

Urutan argumennya CORR(y, x), tapi buat korelasi hasilnya sama aja kalau dibalik, karena korelasi simetris. ::numeric cuma buat maksa hasilnya bisa dibulatkan rapi pakai ROUND.

CORR otomatis ngabaikan baris yang salah satu kolomnya NULL. Jadi kamu nggak perlu filter NULL manual dulu. Buat dasar fungsi agregat kayak AVG dan SUM yang jadi bahan hitungannya, cek SUM dan AVG di SQL.

Gimana cara regresi linear di SQL?

PostgreSQL punya keluarga fungsi REGR buat regresi linear sederhana. Tiga yang paling kepakai: slope, intercept, dan R kuadrat.

SELECT
  ROUND(REGR_SLOPE(omzet, biaya_iklan)::numeric, 2)     AS slope,
  ROUND(REGR_INTERCEPT(omzet, biaya_iklan)::numeric, 0) AS intercept,
  ROUND(REGR_R2(omzet, biaya_iklan)::numeric, 3)        AS r_squared,
  REGR_COUNT(omzet, biaya_iklan)                        AS n
FROM penjualan_harian;

Dari slope dan intercept, kamu susun persamaan garisnya: omzet = slope * biaya_iklan + intercept. Slope 3.2 berarti tiap tambahan Rp 1 iklan, omzet naik kira-kira Rp 3,2. Intercept itu perkiraan omzet waktu biaya iklan nol.

R kuadrat nunjukin seberapa cocok garisnya, dari 0 sampai 1. Nilai 0.7 berarti sekitar 70% variasi omzet bisa dijelasin sama biaya iklan. Sisanya faktor lain. REGR_COUNT ngasih jumlah pasangan data yang kepake, penting buat mastiin sampelnya cukup.

Gimana kalau database saya nggak punya CORR?

MySQL versi lama dan beberapa database lain nggak punya CORR. Tenang, korelasi Pearson bisa dihitung manual dari SUM, COUNT, dan perkalian, semua dalam satu query.

SELECT
  (COUNT(*) * SUM(x*y) - SUM(x) * SUM(y)) /
  (SQRT(COUNT(*) * SUM(x*x) - SUM(x) * SUM(x)) *
   SQRT(COUNT(*) * SUM(y*y) - SUM(y) * SUM(y))) AS korelasi
FROM (
  SELECT biaya_iklan AS x, omzet AS y
  FROM penjualan_harian
) t;

Ini rumus Pearson yang dijabarin jadi operasi dasar. Subquery cuma nge-rename kolom jadi x dan y biar rumusnya kebaca. Hati-hati satu hal: filter dulu baris yang x atau y-nya NULL, karena versi manual nggak otomatis buang NULL kayak CORR.

Contoh kasus: iklan vs omzet di toko_berkah

Ini data 90 hari toko_berkah: biaya iklan harian dan omzet harian. Semua angka dari dataset ngulikdata.

Korelasi keluar di 0.82. Kuat dan positif. Hari-hari dengan iklan lebih besar cenderung punya omzet lebih tinggi. Tapi angka ini sendirian belum bisa dipakai buat keputusan.

Waktu aku jalanin regresinya, slope-nya 3.4 dan R kuadratnya 0.67. Artinya tiap Rp 1 iklan tambahan berhubungan dengan Rp 3,4 omzet tambahan, dan biaya iklan menjelasin sekitar 67% variasi omzet harian.

UkuranNilaiArtinya
Korelasi0.82Hubungan positif kuat
Slope3.4Rp 1 iklan berhubungan dengan Rp 3,4 omzet
R kuadrat0.6767% variasi omzet dijelasin iklan

Yang bikin aku hati-hati: 33% variasi omzet nggak dijelasin iklan. Pas ditelusuri, lonjakan omzet paling gede justru pas tanggal gajian dan hari besar, bukan pas iklan paling mahal. Iklan berhubungan sama omzet, tapi dia bukan satu-satunya penyebab.

Ini kenapa aku selalu pisahin korelasi dari sebab akibat. Bahasan lengkapnya ada di korelasi vs kausalitas.

Korelasi per segmen pakai GROUP BY

Korelasi total kadang nyembunyiin perbedaan antar kelompok. Iklan mungkin ngaruh kuat di satu kategori produk tapi lemah di kategori lain. Pecah pakai GROUP BY.

SELECT
  kategori,
  ROUND(CORR(omzet, biaya_iklan)::numeric, 3) AS korelasi,
  COUNT(*)                                     AS n
FROM penjualan_harian
GROUP BY kategori
HAVING COUNT(*) >= 30
ORDER BY korelasi DESC;

Klausa HAVING COUNT(*) >= 30 buang kategori yang datanya terlalu sedikit. Korelasi dari 5 baris nggak bisa dipercaya, dan filter ini nyegah angka menyesatkan masuk ke hasil.

Kesalahan umum waktu ngitung korelasi di SQL

Nganggep korelasi berarti sebab akibat. Ini kesalahan paling mahal. Korelasi tinggi cuma bilang dua hal bergerak bareng, bukan yang satu nyebabin yang lain. Selalu cari faktor ketiga yang mungkin ngaruh ke dua-duanya.

Ngandelin satu angka tanpa lihat scatter plot. Korelasi cuma nangkep pola garis lurus. Hubungan yang melengkung bisa punya korelasi mendekati 0 padahal polanya jelas. Selalu plot datanya dulu.

Ngitung korelasi dari data terlalu sedikit. Di bawah 30 baris, satu nilai ekstrem bisa narik korelasi jauh. Pakai REGR_COUNT buat cek jumlah pasangan valid.

Lupa buang NULL di rumus manual. CORR otomatis buang NULL, tapi versi manual nggak. Kalau ada NULL, hasilnya salah. Filter dulu di subquery.

Salah baca R kuadrat sebagai kekuatan hubungan. R kuadrat itu seberapa cocok garisnya, bukan arah hubungan. Buat arah dan kekuatan, baca korelasi atau slope-nya.

FAQ

Fungsi apa buat menghitung korelasi di SQL?

Di PostgreSQL kamu pakai CORR(y, x), yang ngasih koefisien korelasi Pearson antara dua kolom. Hasilnya angka dari -1 sampai +1. Mendekati +1 berarti dua kolom naik bareng, mendekati -1 berarti satu naik yang lain turun, dan sekitar 0 berarti nggak ada hubungan linear. BigQuery juga punya CORR. MySQL versi lama nggak punya, jadi harus dihitung manual pakai SUM dan COUNT.

Gimana cara regresi linear di SQL?

PostgreSQL punya fungsi keluarga REGR. REGR_SLOPE(y, x) ngasih kemiringan garis, REGR_INTERCEPT(y, x) ngasih titik potong sumbu y, dan REGR_R2(y, x) ngasih R kuadrat alias seberapa cocok garisnya. Dari slope dan intercept kamu bisa susun persamaan y = slope kali x tambah intercept, terus dipakai buat prediksi kasar nilai y dari x tertentu.

Apa arti nilai korelasi 0.8?

Korelasi 0.8 berarti dua kolom punya hubungan positif yang kuat. Waktu satu naik, yang lain cenderung ikut naik, dan polanya cukup konsisten. Tapi angka ini nggak bilang satu nyebabin yang lain. Korelasi tinggi bisa muncul karena faktor ketiga yang ngaruh ke dua-duanya. Selalu pisahin korelasi dari sebab akibat sebelum ngambil keputusan.

Kenapa CORR saya hasilnya NULL?

Paling sering karena salah satu kolom nilainya konstan, misalnya semua barisnya sama, jadi nggak ada variasi buat dihitung. Bisa juga karena datanya terlalu sedikit atau banyak NULL yang kebuang. CORR otomatis ngabaikan baris yang salah satu kolomnya NULL. Cek dulu jumlah baris valid pakai REGR_COUNT dan pastiin kedua kolom punya variasi nilai.

Berapa banyak data minimal buat korelasi yang berarti?

Nggak ada angka pasti, tapi di bawah 30 baris korelasi gampang nyesatin karena satu dua nilai ekstrem bisa narik hasilnya jauh. Makin banyak data makin stabil. Buat keputusan bisnis, aku biasanya minta minimal 30 sampai 50 titik data dan selalu lihat scatter plot-nya dulu, karena korelasi cuma nangkep pola garis lurus, bukan pola melengkung.

Penutup

Ringkasnya soal korelasi dan regresi di SQL:

  • Korelasi pakai CORR(y, x), hasilnya -1 sampai +1
  • Regresi pakai REGR_SLOPE, REGR_INTERCEPT, dan REGR_R2 buat garis dan kecocokannya
  • Korelasi bukan sebab akibat, selalu cek scatter plot dan faktor lain sebelum menyimpulkan

Coba jalanin CORR di dua kolom yang kamu curigai berhubungan, misalnya diskon dan jumlah order. Kalau angkanya tinggi, lanjut regresi buat lihat seberapa besar efeknya. Latihan query statistik kayak gini bisa kamu terusin di NgulikSQL. Referensi fungsinya 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

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
Tutorial SQL
29 Desember 2026•9 menit baca

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)

NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.

BimaBima
Running Max dan Min dengan Window Function SQL
Tutorial SQL
26 Desember 2026•11 menit baca

Running Max dan Min dengan Window Function SQL

Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.

BimaBima
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Tutorial SQL
23 Desember 2026•12 menit baca

Analisa Afinitas Produk (Cross-Sell) dengan SQL

Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.

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