Rownum & Order By Oracle

Hello there,
berbagi sedikit tips dan trik nih

Malam ini Saya sedikit dipusingkan dengan fungsi Rownum yang tidak berkolaborasi dengan fungsi Order By Oracle. Maksud saya begini, saya ingin mendapatkan 10 data teratas berdasarkan selisih nilai tabel. Awalnya saya memakai query seperti ini.

SELECT *
FROM TIME_SUCCESS_COMMAND
WHERE COMMAND_TYPE = 'Open'
AND ROWNUM <=10
ORDER BY DIFFERENCE ASC

maka kita akan mendapatkan hasil yang salah, karena nbaris yang ditampilkan adalah sebelum proses ORDER.Oracle akan mengambil n baris pertama tanpa mengurutkan, kemudian dari n baris yg dihasilkan baru diurutkan. Jadi query yg benar adalah:

SELECT *
FROM (
	SELECT *
	FROM TIME_SUCCESS_COMMAND
	WHERE COMMAND_TYPE = 'Open'
	ORDER BY DIFFERENCE ASC
)
WHERE ROWNUM <=10');

Maka kita tidak pernah mendapatkan hasil apapun(kecuali nilai m <= 1), karena kondisi rownum >= m tidak akan pernah terpenuhi. Misalkan saja rownum >= 5, hasilnya tdk ada karena rownum selalu dimulai dari 1. Utk mencapai rownum ke 5 harus didapatkan dulu rownum ke-1 sampai 4 (yang ternyata tidak mungkin terpenuhi karena kondisi querynya: rownum >= 5).

Happy Coding All

maka kita tidak pernah mendapatkan hasil apapun
(kecuali nilai m <= 1), karena kondisi rownum >= m
tidak akan pernah terpenuhi.
Misalkan saja rownum >= 5, hasilnya tdk ada karena
rownum selalu dimulai dari 1. Utk mencapai rownum ke 5
harus didapatkan dulu rownum ke-1 sampai 4 (yg
ternyata tidak mungkin terpenuhi karena kondisi
querynya: rownum >= 5).
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s