Data Manipulation Language menggurutkan dengan Order By

 Dalam Data Manipulation Language kita ingin melihat data sesuai dengan keinginan kita. Karena tabel hasil query tidak pernah disusun, meskipun beberapa database melakukan pengurutan bedasarkan urutan(urutan insert, dll). Dengan order by kita bisa memerintahkan agar hasil query/perintah kita diurutukan bedasarkan kolom yang ada dalam perintah select. 

Ascending dan Descending

Ascending dan descending adalah jenis sorting atau pengurutan yang paling dasar

Descending digunakan untuk mengurutkan bedasarkan paling akhir. Akhir di sini tidak diberikan spesifik. Karena akhir tiap tipe data berbeda. Bila alphabet maka akan diurut  mulai dari Z sehingga kata yang dimulai dari alphabet Z akan dimunculkan terlebih dahulu. Bila angka maka angka paling besar akan dimunculkan terlebih dahulu dan bila tipe datanya berupa tanggal/date maka tanggal yang paling baru akan dimunculkan terlebih dahulu. 

SELECT TanggalJual, grandtotal FROM tHJual order by TanggalJual desc.

Sedangkan bila Ascending, dalam Alphabet A akan muncul terlebih dahulu, untuk angka akan dimulai dari yang paling kecil dan tanggal akan dimulai dari yang paling lama

Kemudian order by tidak terbatas hanya pada 1 kolom saja, sehingga kamu bisa lebih fleksibel dalam melakukan pengaturan. Misalkan saya tidak hanya mengurutkan bedasarkan tanggal namun juga bedasarkan jumlah totalnya.

Perhatikan kedua gambar sebagai berikut, gambar pertama adalah gambar yang order by nya hanya bedasarkan tanggal dengan perintah sebagai berikut

SELECT TanggalJual, grandtotal FROM tHJual order by TanggalJual desc.

Order By Tanggal

Sedangkan pada gambar berikut ini dilakukan order by bedasarkan tanggal jual dengan granda total. Dengan perintah berikut :

SELECT TanggalJual, grandtotal FROM tHJual order by TanggalJual, grandtotal desc.

Order by tanggal dan grandtotal

Custom order by dengan format khusus

lalu bagaimana saat client meminta perintah select dengan aturan tertentu seperti perintah/query berikut

SELECT sum(cast(d.hargajual*d.jumlah as bigint)) as jumlahjual,sum(cast(d.jumlah*d.hargabeli as bigint)) as jumlahbeli, format(h.TanggalJual,'MMMM yyyy') as BulanTahun FROM tHJual h, tDJual d where h.Nonota=d.Nonota  and  h.status=1 group by format(h.TanggalJual,'MMMM yyyy')

Order By Bulan dan Tahun

Yang mana berupa perintah untuk melakukan perhitungan penjualan yang dikelompokan bedasarkan bulan dan tahun dengan hasil sebagai berikut


Urutan yang benar harusnya adalah juli, agustus baru september tetapi meski kita tambahkan order by "BulanTahun" bedasarkan ascending urutannya tidak berubah.

Hal ini dikarenakan urutannya dilihat bedasarkan alphabet, sehingga bila kamu ingin mengurutkan bedasarkan tahun dan bulan, kamu harus melakukan perubahan juga pada perintah order by nya. Caranya cukup mudah, pada perintah di atas tanggaljual adalah sebuah tanggal yang diubah dengan perintah format dan hanya menampilkan bulan dan tahun. 

format(h.TanggalJual,'MMMM yyyy')

Maka di order by kita juga bisa melakukan hal yang sama. Hal yang sama di sini adalah menggunakan perintah format. Sehingga hasil akhir akan menjadi seperti berikut

SELECT sum(cast(d.hargajual*d.jumlah as bigint)) as jumlahjual,    sum(cast(d.jumlah*d.hargabeli as bigint)) as jumlahbeli, format(h.TanggalJual,'MMMM yyyy') as BulanTahun FROM tHJual h, tDJual d where h.Nonota=d.Nonota  and  h.status=1 group by format(h.TanggalJual,'MMMM yyyy') order by year(format(h.TanggalJual,'MMMM yyyy')),month(format(h.TanggalJual,'MMMM yyyy')) asc

Mungkin tidak telalu jelas, sehingga akan saya masukan dalam gambar berikut

Hasil akhir akan sesuai dengan urutan yang kita inginkan. Mungkin ada yang mengatakan bahwa kenapa tidak langsung menggunakan YEAR(h.tanggaljual),MONTH(h.tanggaljual) atau YEAR(BulanTahun),MONTH(BulanTahun).

Pertama YEAR(h.tanggaljual) dan MONTH(h.tanggaljual) tidak ada dalam aggregate function atau tidak di dalam group by. Tetapi meskipun kamu masukan dalam group by dari data masi akan keluar dalam bentuk yang salah.

Kedua YEAR(BulanTahun) dan MONTH(BulanTahun), BulanTahun bukanlah nama kolom melainkan sebuah alias yang diberikan saat perintah dijalankan. Sehingga saat kita jalankan perintahnya dan diurutkan bedasarkan BulanTahun akan menimbulkan kebingungan bagi komputer

 







Komentar