-
-
Save hidayat365/4144596 to your computer and use it in GitHub Desktop.
CREATE OR REPLACE FUNCTION transkrip(CHAR) | |
RETURNS TABLE(nim CHAR, kode_mk CHAR, nama_mk CHAR, nilai CHAR) AS | |
$$ | |
BEGIN | |
RETURN QUERY | |
SELECT tmp1.nim, tmp1.kode_mk, tmp1.nama_mk, tmp1.nilai | |
FROM ( | |
SELECT A.nim, A.kode_mk, B.nama_mk, A.nilai | |
, row_number() over(partition by A.kode_mk order by A.nilai) baris | |
FROM khs A JOIN mata_kuliah B ON A.kode_mk = B.kode_mk | |
WHERE A.nim = $1 | |
) tmp1 | |
WHERE baris = 1; | |
END; | |
$$ | |
LANGUAGE plpgsql; |
Begitu ya.. saya cukup mengerti deh sekarang.. :-)
Oiya.. ini sebenarnya tugas kuliah dari masa lalu, dan saya gagal. :-(
Tapi saya belum menyerah, masih mau cari jawabannya (hee.. seperti ada rasa dendam).
Dosennya juga tidak kasih jawabannya. Cuma dikasih clue pake IF dan LOOP. Muter-muter menyelesaikan soal ini, tapi alhasil nilai SQL saya kemarin jeblok banget.
Hehehehe.. ribet deh.. :-D
Dan kalau udah ketemu jawabannya seperti ini, ada niat nantinya fungsi ini mau saya expand lagi. Hee.. coba-coba sendiri aja, tiba-tiba jadi kepikiran. (yang ini bukan tugas kuliah lho, Mas.. cuma pengen explore fungsi di SQL aja).
Nilai dari mata kuliah yang memakai kurikulum lama (misal: 2007) akan dikonversi ke nilai dengan mata kuliah di kurikulum baru (misal: 2012), jadi kolom nilai
mata kuliah di kurikulum baru akan mengambil kolom nilai
dari mata kuliah di kurikulum lama.
Misal, di kurikulum 2007, ada mata kuliah Pancasila = nilai B, lalu mata kuliah tersebut dikonversi ke kurikulum 2012 menjadi Kewarganegaraan, maka mata kuliah Kewarganegaraan = nilai B.
Dan ada beberapa kasus lainnya, yang saya ciptakan sendiri.
Hehehehe.. saya kadang doyan bikin soal sendiri, tapi malah bingung dan stress saat mau buat jawabannnya.
:-p
Jawaban dari Mas bisa buat saya jadikan pondasi untuk membuat fungsi berikutnya.
Hmm.. saya belum begitu mengerti tentang coding prosedural, tapi memang bekerja dengan bahasa pemrograman database berbeda dengan bahasa pemrograman lainnya.
Terima kasih, Mas..
Mudah-mudahan tidak kapok memberikan pelajaran bagi newbie seperti saya ini.
:-)
hasil subquery kita beri nama alias
tmp1
kemudian pada query terluar cukup select field
tmp1.nim, tmp1.kode_mk, tmp1.nama_mk, tmp1.nilai
agar tambahan field
baris
tidak ikut dalam result setkemudian
WHERE baris=1
ya nampilin hanya nilai tertinggi yang pasti sudah bernomor baris1
saran saya ketika bekerja dengan database, hilangkan paradigma coding prosedural yang biasa menggunakan looping, karena saat memproses data di database paradigma yang kita pakai adalah set atau himpunan. itulah sebabnya hasil query biasa disebut sebagai result set