ORDER BY SQL: Urutkan Hasil Query Naik atau Turun
Blog/Tutorial SQL/ORDER BY SQL: Urutkan Hasil Query Naik atau Turun

ORDER BY SQL: Urutkan Hasil Query Naik atau Turun

BimaBima
·23 Januari 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

ORDER BY adalah klausa SQL yang mengurutkan hasil query berdasarkan satu kolom atau lebih. Tulis ORDER BY nama_kolom ASC untuk urutan naik, atau DESC untuk urutan turun — kalau nggak disebut, database pakai ASC. Tanpa ORDER BY, urutan baris hasil query nggak dijamin konsisten, bahkan untuk query yang sama persis.

ORDER BY adalah klausa SQL yang ngurutin hasil query. Naik pakai ASC, turun pakai DESC. Satu baris tambahan, dan tabel hasilnya langsung kebaca.

Ada satu hal yang bikin kaget orang yang baru mulai: tanpa ORDER BY, urutan baris yang keluar nggak dijamin. Query yang sama, dijalanin dua kali, bisa ngasih urutan berbeda.

Di bawah ada sintaksnya, sortir multi kolom, penanganan NULL yang beda-beda antar database, dan trik urutan custom pakai CASE.

Apa itu ORDER BY di SQL?

ORDER BY adalah klausa yang menentukan urutan baris di hasil query, berdasarkan satu kolom atau lebih. Dia jalan hampir paling akhir — setelah semua baris disaring dan dihitung.

SELECT kolom
FROM tabel
ORDER BY kolom_pengurut [ASC | DESC];

ASC artinya naik: 1 ke 100, A ke Z, tanggal lama ke tanggal baru. DESC kebalikannya.

Kalau kamu nggak nulis apa-apa, database pakai ASC. Jadi ORDER BY total dan ORDER BY total ASC itu sama persis.

Tabel latihan: toko_berkah

CREATE TABLE transaksi (
    id        INT PRIMARY KEY,
    tanggal   DATE NOT NULL,
    kota      VARCHAR(50),
    kategori  VARCHAR(50),
    produk    VARCHAR(100),
    total     DECIMAL(12,2),
    rating    INT
);

INSERT INTO transaksi (id, tanggal, kota, kategori, produk, total, rating) VALUES
(1, '2026-01-03', 'Surabaya', 'Minuman', 'Kopi Sachet Gula Aren', 25000.00,  5),
(2, '2026-01-03', 'Bandung',  'Snack',   'Keripik Singkong',      60000.00,  NULL),
(3, '2026-01-04', 'Surabaya', 'Minuman', 'Teh Kotak',             96000.00,  4),
(4, '2026-01-05', 'Jakarta',  'Sembako', 'Beras Premium 5kg',     225000.00, 5),
(5, '2026-01-06', 'Bandung',  'Minuman', 'Kopi Susu Botol',       108000.00, 3),
(6, '2026-01-07', 'Jakarta',  'Snack',   'Biskuit Kaleng',        110000.00, NULL),
(7, '2026-01-08', 'Surabaya', 'Sembako', 'Minyak Goreng 2L',      228000.00, 4),
(8, '2026-01-09', 'Bandung',  'Minuman', 'Kopi Sachet Gula Aren', 50000.00,  5);

Gimana cara urutkan dari besar ke kecil?

SELECT produk, total FROM transaksi
ORDER BY total DESC;

Hasilnya dimulai dari Minyak Goreng 2L (228.000), lalu Beras Premium 5kg (225.000), turun sampai Kopi Sachet Gula Aren (25.000).

Ini bentuk yang paling sering dipakai di laporan penjualan. Produk terlaris di atas, yang seret di bawah.

Gimana cara urutkan berdasarkan dua kolom?

Sebut kolomnya dipisah koma. Urutan penulisan = urutan prioritas.

SELECT kota, produk, total FROM transaksi
ORDER BY kota ASC, total DESC;

Database ngurutin kota dulu (Bandung, Jakarta, Surabaya). Baru di dalam tiap kota, transaksinya diurutin dari total terbesar.

Kolom kedua cuma jadi penentu waktu kolom pertama nilainya kembar. Kalau semua kotanya beda, kolom kedua nggak ada efeknya sama sekali.

Tiap kolom boleh punya arah sendiri. ORDER BY kota ASC, total DESC — satu naik, satu turun. Itu sah.

NULL ditaruh di mana waktu diurutkan?

Ini bagian yang bikin hasil kamu beda-beda antar database.

DatabaseASCDESC
PostgreSQL, OracleNULL di akhirNULL di awal
MySQL, SQL ServerNULL di awalNULL di akhir

Di PostgreSQL dan Oracle, kamu bisa atur sendiri:

SELECT produk, rating FROM transaksi
ORDER BY rating DESC NULLS LAST;

MySQL nggak punya NULLS LAST. Cara yang jalan di semua database: bikin kolom bantu pakai CASE.

SELECT produk, rating FROM transaksi
ORDER BY (CASE WHEN rating IS NULL THEN 1 ELSE 0 END), rating DESC;

Baris dengan rating NULL dikasih nilai 1, sisanya 0. Yang 0 naik duluan, jadi NULL selalu nyangkut di bawah. Perilaku NULL lengkapnya dibahas di artikel NULL di SQL.

Bisa nggak ORDER BY pakai alias?

Bisa. Ini salah satu hal yang membedakan ORDER BY dari WHERE.

SELECT produk, total * 0.11 AS ppn
FROM transaksi
ORDER BY ppn DESC;

Jalan mulus. Alasannya: ORDER BY dieksekusi setelah SELECT, jadi alias-nya udah ada. WHERE jalan sebelum SELECT, makanya dia nggak bisa lihat alias.

ORDER BY + LIMIT: bikin Top N

Ini pasangan yang paling sering dipakai di laporan.

SELECT produk, total FROM transaksi
ORDER BY total DESC
LIMIT 3;

Tiga produk termahal, urut dari yang paling gede. Tanpa ORDER BY, LIMIT 3 bakal ngasih 3 baris acak — dan itu jelas bukan yang kamu mau. Detail LIMIT ada di artikel LIMIT dan OFFSET.

Trik: urutan custom pakai CASE

Kadang urutan yang kamu mau bukan alfabet dan bukan angka. Misalnya kategori harus tampil dengan urutan Sembako, Minuman, Snack — sesuai prioritas bisnis, bukan abjad.

SELECT produk, kategori FROM transaksi
ORDER BY CASE kategori
           WHEN 'Sembako' THEN 1
           WHEN 'Minuman' THEN 2
           WHEN 'Snack'   THEN 3
           ELSE 99
         END;

Kamu kasih nomor urut sendiri ke tiap nilai, lalu urutin pakai nomor itu. Kategori yang nggak kesebut jatuh ke 99 dan nyangkut di bawah.

Kesalahan umum di ORDER BY

Angka disimpan sebagai teks

Kalau kolom nomor disimpan sebagai VARCHAR, urutannya jadi 1, 10, 100, 2, 20 — karena diurutin per karakter, bukan per nilai. Perbaikannya: ubah tipe kolomnya, atau paksa konversi waktu ngurutin dengan ORDER BY CAST(kode AS INT).

Ngandelin urutan tanpa ORDER BY

"Kemarin urutannya bener kok." Iya, kebetulan. Database bebas ngasih baris dalam urutan apa pun yang paling cepat buat dia, dan urutan itu bisa berubah setelah data nambah, index dibikin, atau query jalan paralel. Kalau urutan penting, tulis ORDER BY.

ORDER BY nomor kolom

ORDER BY 2 artinya "urutkan pakai kolom kedua di SELECT". Jalan, tapi rapuh — begitu ada yang nambah kolom di SELECT, urutannya diam-diam berubah. Sebut nama kolomnya.

ORDER BY di kolom besar bikin lambat

Ngurutin 10 juta baris itu kerja berat. Kalau query-nya lambat, cek dulu apakah kolom pengurutnya punya index. Bahasan lengkapnya ada di artikel index SQL.

Referensi klausanya ada di halaman fungsi ORDER BY dan glosarium sorting. Sintaks resminya di dokumentasi PostgreSQL.

FAQ ORDER BY SQL

Apa default ORDER BY, ASC atau DESC?

Default-nya ASC alias urutan naik — dari kecil ke besar, dari A ke Z, dari tanggal lama ke tanggal baru. Jadi ORDER BY total dan ORDER BY total ASC hasilnya sama persis. Buat urutan turun, kamu harus nulis DESC secara eksplisit. Nggak ada database yang default-nya DESC.

Gimana cara urutkan berdasarkan dua kolom?

Sebut kolomnya dipisah koma, dan urutan penulisannya menentukan prioritas. ORDER BY kota ASC, total DESC ngurutin kota dulu dari A ke Z, lalu di dalam tiap kota, transaksi diurutkan dari total terbesar. Kolom kedua cuma jadi penentu waktu kolom pertama nilainya kembar.

NULL ditaruh di mana waktu ORDER BY?

Beda-beda tergantung database. PostgreSQL naruh NULL di akhir waktu ASC dan di awal waktu DESC. MySQL kebalikannya. PostgreSQL dan Oracle punya NULLS FIRST dan NULLS LAST. Cara yang jalan di semua database: bikin kolom bantu pakai CASE WHEN, lalu urutkan pakai itu dulu.

Kenapa hasil query saya urutannya berubah-ubah?

Karena kamu nggak pakai ORDER BY. Tanpa ORDER BY, database bebas ngasih baris dalam urutan apa pun yang paling cepat buat dia — dan urutan itu bisa beda antar eksekusi, apalagi setelah data berubah. Kalau urutan penting buat kamu, tulis ORDER BY. Selalu.

Bisa nggak ORDER BY pakai alias kolom?

Bisa. ORDER BY dieksekusi setelah SELECT, jadi alias yang kamu bikin di SELECT udah tersedia. Ini bedanya sama WHERE, yang jalan sebelum SELECT dan karena itu nggak bisa lihat alias. Jadi ORDER BY ppn jalan, sedangkan WHERE ppn > 10000 bakal error.

Rangkuman

ORDER BY default-nya naik. Tulis DESC kalau mau turun.

Kolom pertama menentukan urutan utama, kolom berikutnya cuma jadi pemecah seri. Dan posisi NULL beda antar database — kalau penting, atur sendiri pakai CASE.

Copy tabel transaksi di atas, terus jalanin query yang sama dua kali: sekali dengan ORDER BY, sekali tanpa. Lihat sendiri bedanya.

Lanjut ke LIMIT dan OFFSET buat ngambil sebagian hasil yang udah kamu urutin.

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

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

BimaBima
Latihan Soal SQL Menengah: Window Function & CTE
Tutorial SQL
1 Juli 2026•11 menit baca

Latihan Soal SQL Menengah: Window Function & CTE

8 soal SQL level menengah pakai window function dan CTE, lengkap dengan jawaban, penjelasan, dan jebakan yang sering bikin orang salah.

BimaBima
50 Latihan Soal SQL Pemula + Kunci Jawaban
Tutorial SQL
28 Juni 2026•13 menit baca

50 Latihan Soal SQL Pemula + Kunci Jawaban

50 latihan soal SQL dari SELECT sampai window function, pakai dataset toko_berkah. Kunci jawabannya ada semua, tapi coba dulu sendiri sebelum ngintip.

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.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore