Struktur dasarnya:
=QUERY('P&L'!A:F, "SELECT A, B, C, D ORDER BY D DESC", 1)
Argumen ketiga (1) adalah jumlah baris header. Huruf kolom (A, B, D) merujuk pada kolom spreadsheet yang sebenarnya di tab sumber, bukan posisi dalam range yang dipilih.
Mengapa ORDER BY Lebih Baik dari Sort Manual
Ketika Anda menggunakan Data → Urutkan rentang pada tab sumber, baris-baris berpindah secara fisik. Formula di tab lain yang merujuk ke 'P&L'!C14 kini menunjuk ke entitas yang salah. Dalam model dengan 8 tab - P&L, Neraca, Arus Kas, FCFF, Asumsi, Return, Sensitivitas, Output - satu kesalahan sort bisa merusak puluhan referensi sekaligus.
QUERY ORDER BY menulis array yang sudah diurutkan ke area tampilan terpisah. Sumber data tetap tidak berubah. Anda bisa menyerahkan laporan ke CFO yang terbiasa mengurutkan data sesuka hati tanpa khawatir data upstream ikut bergerak.
Sintaks: Ascending, Descending, Multi-Kolom
Default-nya adalah ascending. Untuk keperluan keuangan, Anda hampir selalu ingin descending - nilai terbesar di atas:
=QUERY('Revenue'!A:E, "SELECT A, B, E ORDER BY E DESC", 1)
Pengurutan multi-kolom bekerja persis seperti SQL, dengan kunci berantai:
=QUERY('Pipeline'!A:G,
"SELECT A, B, C, D ORDER BY C DESC, D ASC", 1)
Urutkan berdasarkan ARR secara descending, lalu tanggal penutupan secara ascending sebagai tiebreaker. Untuk model DCF sindikasi perbankan dengan 40+ deal dalam pipeline, ini mengurutkan berdasarkan ukuran deal sekaligus menjaga deal berukuran sama dalam urutan kronologis.
QUERY Lintas Tab: Jebakan Referensi Kolom
Untuk satu range berurutan dari satu tab, huruf kolom berfungsi normal:
=QUERY('FCFF'!A:H, "SELECT A, B, G, H ORDER BY G DESC", 1)
Namun ketika Anda membangun array literal dari kolom yang tidak berurutan atau dari beberapa tab, QUERY tidak lagi bisa melacak huruf kolom aslinya. Anda harus beralih ke notasi posisional Col1, Col2:
// Ini gagal
=QUERY({'P&L'!C:C, 'P&L'!F:F}, "SELECT C, F ORDER BY F DESC", 1)
// Ini berhasil
=QUERY({'P&L'!C:C, 'P&L'!F:F}, "SELECT Col1, Col2 ORDER BY Col2 DESC", 1)
Per Juni 2026, perbedaan ini sudah didokumentasikan dalam referensi Visualization API Query Language milik Google, namun informasinya cukup tersembunyi. Menurut dokumentasi tersebut: "Kolom direferensikan menggunakan ID kolom, yang dalam QUERY Sheets berupa huruf kolom spreadsheet untuk range langsung, namun menjadi pengenal posisional untuk array literal."
Panduan resmi fungsi QUERY di halaman dukungan Google Sheets juga mencatat bahwa sintaks query mengikuti Google Visualization API Query Language, bukan SQL standar - perbedaan yang sering membingungkan analis yang terbiasa dengan database relasional.
Sebagian besar analis pernah mengalami error ini minimal satu kali saat membangun tampilan ringkasan multi-sumber.
Untuk menumpuk baris dari beberapa tab (pola konsolidasi triwulanan):
=QUERY({'Jan'!A:E; 'Feb'!A:E; 'Mar'!A:E},
"SELECT Col1, Col2, Col5 ORDER BY Col5 DESC", 1)
Titik koma menumpuk baris. Koma menumpuk kolom.
WHERE + ORDER BY Bersamaan
Anda biasanya membutuhkan keduanya. Filter dulu, lalu urutkan hasilnya:
=QUERY('SKU Data'!A:F,
"SELECT A, B, D, F WHERE F > 0.35 ORDER BY F DESC",
1)
Formula ini mengambil SKU dengan contribution margin (kolom F) di atas 35% dan mengurutkannya secara descending. Untuk slide contribution margin per SKU dalam laporan direksi, ini adalah seluruh formulanya - tanpa kolom bantu, tanpa langkah filter manual.
Dengan ambang batas tanggal dinamis dari tab Asumsi:
=QUERY('Transactions'!A:E,
"SELECT A, B, C, E WHERE B >= date '"&TEXT(Assumptions!$B$3,"yyyy-mm-dd")&"' ORDER BY E DESC",
1)
Wrapper TEXT() mengonversi referensi sel asumsi Anda ke format yyyy-mm-dd yang diharapkan QUERY. Tanpa itu, perbandingan tanggal akan diam-diam meloloskan semua baris atau tidak ada sama sekali, tergantung tipe data. Tidak ada pesan error, hanya data yang salah - jenis bug paling berbahaya dalam sebuah model.
Mengurutkan Berdasarkan Kolom yang Tidak Ditampilkan
QUERY ORDER BY memungkinkan Anda mengurutkan berdasarkan kolom tanpa menyertakannya dalam output. SORT() tidak bisa melakukan ini dengan rapi.
=QUERY('Headcount'!A:G,
"SELECT A, B, C ORDER BY G DESC",
1)
Output menampilkan nama, departemen, dan salary band (kolom A-C). Baris diurutkan berdasarkan tanggal bergabung (kolom G) tanpa menampilkan G. Untuk tampilan headcount yang akan dipresentasikan ke direksi - di mana Anda ingin karyawan terbaru muncul di atas namun tidak ingin tanggal mengacaukan tampilan - ini adalah pola yang tepat.
Sensitivitas Runway: Contoh Nyata
Untuk analisis sensitivitas laju rekrutmen, Anda ingin rencana rekrutmen diurutkan berdasarkan cash burn bulanan. Jika runway turun di bawah 18 bulan, CFO bisa langsung membaca daftar pemotongan dari atas ke bawah:
=QUERY('Headcount'!A:J,
"SELECT A, C, D, J WHERE D = 'Planned' ORDER BY J DESC",
1)
Kolom J adalah biaya fully-loaded bulanan. Dengan perusahaan ber-ARR Rp 65 miliar yang membakar kas Rp 5,9 miliar per bulan, mengetahui bahwa tiga rencana rekrutmen engineer mewakili tambahan burn Rp 800 juta per bulan - dan melihatnya dalam urutan prioritas - adalah analisis yang langsung bisa ditindaklanjuti. Output yang diurutkan dari tab headcount yang aktif berarti CFO selalu melihat data terkini, bukan snapshot yang sudah kedaluwarsa.
QUERY ORDER BY vs. SORT()
QUERY ORDER BY | SORT() | |
|---|---|---|
| Filter saat mengurutkan | Ya (WHERE) | Perlu wrapper FILTER |
| Pengurutan multi-kolom | Ya | Ya |
| Pemilihan kolom | Ya (SELECT) | Tidak |
| Penanganan header | Argumen ketiga | Eksklusi manual |
| Sumber array literal | Sintaks Col1, Col2 | Lebih sederhana |
| Agregasi | Ya (GROUP BY, SUM) | Tidak |
Untuk keperluan sederhana seperti "urutkan range berurutan ini berdasarkan kolom 3," SORT() lebih ringkas. Untuk semua pekerjaan yang melibatkan filter + select + sort dalam satu operasi - yang merupakan sebagian besar pekerjaan laporan direksi - QUERY menyelesaikannya dalam satu formula.
Men-debug Kegagalan Umum
Urutan yang diam-diam salah: Kolom berisi angka yang tersimpan sebagai teks. QUERY mengurutkan teks secara leksikografis, sehingga "100" muncul sebelum "20". Bungkus kolom sumber dengan VALUE() atau periksa perataan - angka asli rata kanan, angka berformat teks rata kiri.
#VALUE! pada range lintas tab: Anda menggunakan huruf kolom di dalam array literal {}. Ganti dengan Col1, Col2.
Filter tanggal mengembalikan semua baris atau tidak ada: Bungkus referensi sel tanggal Anda dengan TEXT(sel, "yyyy-mm-dd") seperti yang ditunjukkan di atas.
Pengurutan diabaikan sepenuhnya: Anda memiliki ORDER BY setelah GROUP BY atau PIVOT. Klausa-klausa ini berkonflik dalam konfigurasi tertentu. Lakukan pengelompokan terlebih dahulu, kemudian bungkus output yang sudah dikelompokkan dalam QUERY kedua untuk mengurutkannya.
FAQ: QUERY Sort By di Google Sheets
Apa perbedaan utama antara QUERY ORDER BY dan fungsi SORT()?
QUERY ORDER BY memungkinkan filter, pemilihan kolom, dan pengurutan dalam satu formula sekaligus. SORT() hanya mengurutkan - untuk memfilter sebelum mengurutkan, Anda harus membungkusnya dengan FILTER(). Jika pekerjaan Anda melibatkan lebih dari sekadar pengurutan sederhana, QUERY jauh lebih efisien.
Bisakah saya mengurutkan berdasarkan kolom yang tidak muncul di output?
Ya. Tuliskan kolom tersebut di klausa ORDER BY tanpa menyertakannya dalam SELECT. Contohnya SELECT A, B, C ORDER BY G DESC akan mengurutkan baris berdasarkan kolom G, namun G tidak akan tampil di hasil akhir.
Kenapa QUERY ORDER BY saya tidak mengurutkan angka dengan benar?
Kemungkinan besar angka tersebut tersimpan sebagai teks. QUERY akan mengurutkannya secara leksikografis, bukan numerik - sehingga "9" dianggap lebih besar dari "10". Periksa perataan sel di tab sumber: angka asli rata kanan, teks rata kiri. Gunakan VALUE() untuk mengonversi jika perlu.
Bagaimana cara mengurutkan data dari beberapa tab sekaligus?
Gunakan array literal dengan titik koma untuk menumpuk baris: {'Jan'!A:E; 'Feb'!A:E; 'Mar'!A:E}. Di dalam klausa QUERY, gunakan notasi Col1, Col2 (bukan huruf kolom) karena QUERY tidak bisa melacak huruf kolom asli saat sumber datanya adalah array literal.
Apakah ORDER BY bisa dikombinasikan dengan GROUP BY?
Bisa, namun urutannya penting. GROUP BY harus muncul sebelum ORDER BY dalam string query. Jika hasilnya masih tidak sesuai, bungkus output yang sudah dikelompokkan dalam QUERY kedua khusus untuk pengurutan.
Jika Anda ingin formula QUERY - termasuk kombinasi WHERE, ORDER BY, dan GROUP BY - dibuat langsung dari deskripsi sederhana seperti "tampilkan SKU di atas margin 35% diurutkan berdasarkan revenue," coba ModelMonkey gratis 14 hari. Formula ditulis dan diperbarui langsung dari sidebar Google Sheets Anda.