Ahmad Lazim

· 5 menit baca · #SQL #Excel #Data

SQL dan Excel: Dua Cara Berpikir yang Sama tentang Data

Kalau sudah lancar memakai Filter, XLOOKUP, dan PivotTable, Anda sebenarnya sudah memahami separuh SQL. Artikel ini memetakan keduanya langkah demi langkah.

Oleh · Software Engineer

SQL dan Excel sering dianggap berasal dari dua dunia yang berbeda: satu untuk programmer, satu lagi untuk orang kantoran. Padahal keduanya bekerja dengan bentuk data yang sama, yaitu tabel berisi baris dan kolom, dan menjawab pertanyaan yang sama: baris mana yang saya butuhkan, bagaimana urutannya, dan berapa totalnya.

Artikel ini memetakan operasi SQL yang paling sering dipakai ke padanannya di Excel, memakai satu set data contoh yang sama. Bagi pengguna Excel, ini jalan pintas untuk belajar SQL.

Data contoh

Kita pakai dua tabel kecil. Di Excel, ubah setiap rentang menjadi Excel Table (pilih datanya lalu tekan Ctrl+T), kemudian beri nama Pesanan dan Pelanggan lewat tab Table Design. Dengan begitu kita bisa memakai structured reference seperti Pesanan[total] yang jauh lebih mudah dibaca daripada E2:E6.

Tabel pesanan:

 id_pesanan |  tanggal   | id_pelanggan |  produk  |  total
------------+------------+--------------+----------+---------
       1001 | 2026-08-01 | P01          | Keyboard |  350000
       1002 | 2026-08-01 | P02          | Mouse    |  150000
       1003 | 2026-08-02 | P01          | Monitor  | 1800000
       1004 | 2026-08-03 | P03          | Mouse    |  150000
       1005 | 2026-08-03 | P02          | Headset  |  450000

Tabel pelanggan:

 id_pelanggan | nama  |   kota
--------------+-------+----------
 P01          | Rina  | Bandung
 P02          | Dimas | Jakarta
 P03          | Sari  | Surabaya

WHERE adalah Filter

Pertanyaan: pesanan mana yang nilainya minimal Rp300.000?

SELECT id_pesanan, produk, total
FROM pesanan
WHERE total >= 300000;

Cara manual di Excel: klik salah satu sel tabel, buka Data > Filter, klik panah di kolom total, pilih Number Filters > Greater Than Or Equal To, lalu isi 300000. Hasilnya pesanan 1001, 1003, dan 1005.

Di Microsoft 365 ada cara yang lebih mirip SQL, yaitu fungsi FILTER. Untuk kondisi ganda, AND ditulis sebagai perkalian dan OR sebagai penjumlahan:

WHERE total >= 300000 AND tanggal >= '2026-08-02'
=FILTER(Pesanan, (Pesanan[total] >= 300000) * (Pesanan[tanggal] >= DATE(2026,8,2)))

Filter bawaan hanya menyembunyikan baris, sedangkan FILTER dan WHERE menghasilkan kumpulan data baru tanpa mengubah sumbernya. Cara berpikir kedua inilah yang dipakai SQL.

ORDER BY adalah Sort

SELECT * FROM pesanan
ORDER BY total DESC, tanggal ASC
LIMIT 3;

Di Excel: buka Data > Sort, pilih total dengan urutan Largest to Smallest, klik Add Level, lalu pilih tanggal dengan urutan Oldest to Newest. Versi rumusnya:

=TAKE(SORTBY(Pesanan, Pesanan[total], -1, Pesanan[tanggal], 1), 3)

SORTBY berperan sebagai ORDER BY (angka -1 berarti menurun), dan TAKE berperan sebagai LIMIT.

JOIN adalah XLOOKUP atau VLOOKUP

Tabel pesanan hanya menyimpan id_pelanggan. Untuk menampilkan nama dan kota, SQL memakai JOIN:

SELECT p.id_pesanan, p.produk, p.total, c.nama, c.kota
FROM pesanan AS p
LEFT JOIN pelanggan AS c ON c.id_pelanggan = p.id_pelanggan;

Di Excel, tambahkan kolom nama di tabel Pesanan, lalu isi dengan:

=XLOOKUP([@id_pelanggan], Pelanggan[id_pelanggan], Pelanggan[nama], "Tidak ditemukan")

Untuk versi Excel lama yang belum punya XLOOKUP:

=VLOOKUP([@id_pelanggan], Pelanggan, 2, FALSE)

VLOOKUP punya dua jebakan klasik. Kolom kunci harus berada paling kiri di tabel sumber, dan argumen terakhir wajib FALSE. Tanpa FALSE, Excel melakukan pencarian approximate dan bisa mengembalikan nama yang salah tanpa pesan error apa pun.

Ada satu perbedaan konsep yang penting. JOIN mengembalikan semua pasangan yang cocok, jadi kalau id_pelanggan ternyata ganda di tabel pelanggan, baris pesanan ikut berlipat. XLOOKUP hanya mengambil kecocokan pertama. Keduanya baru setara kalau kolom kunci di tabel acuan benar-benar unik, dan itulah alasan kolom seperti ini dijadikan primary key di database. Nilai "Tidak ditemukan" di Excel setara dengan NULL pada LEFT JOIN. Kalau baris tersebut dibuang, hasilnya sama dengan INNER JOIN.

GROUP BY adalah PivotTable

Pertanyaan: berapa jumlah pesanan dan total belanja tiap pelanggan?

SELECT id_pelanggan,
       COUNT(*)   AS jumlah_pesanan,
       SUM(total) AS total_belanja
FROM pesanan
GROUP BY id_pelanggan
ORDER BY total_belanja DESC;

Langkah dengan PivotTable:

  1. Klik tabel Pesanan, lalu pilih Insert > PivotTable.
  2. Seret id_pelanggan ke area Rows. Ini adalah GROUP BY.
  3. Seret total ke Values sehingga menjadi Sum of total. Ini adalah SUM(total).
  4. Seret id_pesanan ke Values, lalu ubah Value Field Settings menjadi Count. Ini adalah COUNT(*).
  5. Urutkan kolom total dari yang terbesar.

Hasilnya: P01 punya 2 pesanan senilai 2.150.000, P02 punya 2 pesanan senilai 600.000, dan P03 punya 1 pesanan senilai 150.000.

Kalau hanya ingin pelanggan dengan belanja di atas 500.000, SQL menambahkan HAVING SUM(total) > 500000. Padanannya di PivotTable adalah Value Filters pada label baris. Microsoft 365 versi terbaru juga punya fungsi GROUPBY, misalnya =GROUPBY(Pesanan[id_pelanggan], Pesanan[total], SUM), untuk hasil serupa tanpa membuat PivotTable.

Fungsi agregat dengan kondisi

Sering kali kita hanya butuh satu angka. Di SQL, agregat digabung dengan WHERE:

SELECT SUM(total) FROM pesanan WHERE produk = 'Mouse';      -- 300000
SELECT COUNT(*)   FROM pesanan WHERE total >= 300000;       -- 3
SELECT AVG(total) FROM pesanan WHERE id_pelanggan = 'P02';  -- 300000

Di Excel, padanannya adalah fungsi berakhiran IF dan IFS:

=SUMIFS(Pesanan[total], Pesanan[produk], "Mouse")
=COUNTIF(Pesanan[total], ">=300000")
=AVERAGEIF(Pesanan[id_pelanggan], "P02", Pesanan[total])

Hati-hati dengan urutan argumen. Di SUMIFS, rentang yang dijumlahkan ada di depan, sedangkan di SUMIF dan AVERAGEIF justru ada di belakang. Biasakan memakai versi IFS (SUMIFS, COUNTIFS, AVERAGEIFS) karena urutannya konsisten dan bisa menampung banyak kondisi, persis seperti WHERE ... AND ....

Untuk COUNT(DISTINCT ...), gabungkan UNIQUE dengan COUNTA:

=COUNTA(UNIQUE(Pesanan[id_pelanggan]))

Satu hal lagi: AVG di SQL mengabaikan NULL, dan AVERAGE di Excel mengabaikan sel kosong. Namun angka 0 tetap dihitung di keduanya, jadi jangan mengisi data yang belum ada dengan 0.

CSV: jembatan di antara keduanya

Dari database ke Excel

Ekspor hasil query ke CSV. Di PostgreSQL dengan psql:

\copy (SELECT * FROM pesanan) TO 'pesanan.csv' WITH (FORMAT csv, HEADER)

Jangan langsung klik dua kali file tersebut. Buka lewat Data > From Text/CSV supaya Anda bisa memilih encoding 65001: Unicode (UTF-8), pemisah kolom, dan tipe data sebelum dimuat. Cara ini menghindari tiga masalah umum:

  • Semua data masuk ke satu kolom. Dengan pengaturan regional Indonesia, Excel memakai titik koma sebagai pemisah daftar, sehingga CSV berpemisah koma tidak terpecah dengan benar.
  • Nol di depan hilang. Nomor telepon 0812... atau kode seperti 007 berubah menjadi angka. Ubah tipe kolomnya menjadi Text.
  • Tanggal terbaca salah. Format ISO YYYY-MM-DD paling aman untuk dipertukarkan.

Dari Excel ke database

Simpan dengan File > Save As > CSV UTF-8 (Comma delimited), lalu muat ke database:

\copy pesanan FROM 'pesanan.csv' WITH (FORMAT csv, HEADER)

Kalau Excel Anda memakai pengaturan regional Indonesia, file hasilnya bisa saja berpemisah titik koma. Cek dulu dengan text editor, lalu tambahkan DELIMITER ';' bila perlu.

Ringkasan pemetaan

  • WHERE setara dengan Filter atau fungsi FILTER.
  • ORDER BY setara dengan Sort atau SORTBY.
  • LIMIT setara dengan TAKE.
  • JOIN setara dengan XLOOKUP atau VLOOKUP.
  • GROUP BY setara dengan PivotTable atau GROUPBY.
  • HAVING setara dengan Value Filters di PivotTable.
  • Agregat dengan WHERE setara dengan SUMIFS, COUNTIFS, dan AVERAGEIFS.

Kapan memakai yang mana

Excel unggul untuk eksplorasi cepat, data berukuran sedang, dan laporan yang perlu dibuka orang non-teknis. SQL unggul ketika data sangat besar (satu sheet Excel dibatasi 1.048.576 baris), dipakai banyak orang sekaligus, atau analisisnya harus bisa diulang dengan cara yang persis sama setiap minggu. Query SQL adalah teks: bisa disimpan, ditinjau, dan dijalankan ulang, sementara rangkaian klik di Excel mudah terlupa.

Latihan yang efektif: ambil satu laporan Excel yang rutin Anda buat, lalu tulis ulang setiap langkahnya sebagai query SQL. SQLite cocok untuk ini karena gratis, tidak perlu server, dan bisa langsung mengimpor CSV. Lama-kelamaan akan terlihat bahwa yang berubah hanya sintaksnya. Cara berpikirnya tetap sama.

Baca juga