Perintah SQL Menampilkan Nilai Matakuliah Terbaik (Studi Kasus Akademik)
April 25th, 2009 | by rosihanari |
Cetak Artikel
Sebuah sistem informasi akademik seharusnya merekam atau mencatat semua track record akademik mahasiswanya secara lengkap detail dan lengkap. Proses pencatatan ini harus dilakukan secara kontinyu tiap semester.
Sistem informasi akademik tidak lepas dengan pencatatan nilai semua mahasiswanya. Dalam pencatatan nilai ini, terkadang ada banyak mahasiswa yang mengambil sebuah matakuliah lebih dari sekali. Yah… itu wajar mengingat tidak semua matakuliah itu mudah, sehingga butuh beberapa kali pengambilan matakuliah yang sama sampai mencapai nilai yang baik.
Sebagai contoh misalkan ada mahasiswa A dia mengambil matakuliah X pada semester 1. Karena si A ini anaknya malas belajar, maka nilai matakuliah X nya jelek sekali yaitu 1.0 (D). Nah… semester 3, si A ini kembali lagi mengambil matakuliah X. Namun dengan usahanya kali ini dia hanya mendapatkan nilai 2.0 (C). Karena matakuliah itu sebenarnya menyenangkan, maka si A ingin mengambil lagi matakuliah X di semester 5. Nah.. karena usahanya dalam belajar tinggi, maka akhirnya ia mendapat nilai 4.0 (A).
Nah… dalam sistem informasi akademik harus dapat mencatat semua track record mahasiswa A di atas dalam pengambilan matakuliah X nya, mulai dari semester 1, 3, dan 5.
Selanjutnya ketika si A akan lulus kuliah, maka sistem informasi akademik akan mencetak semua hasil studinya (transkrip nilai). Untuk kasus di atas (pengambilan matakuliah X), harusnya sistem informasi akademik hanya akan menampilkan hasil yang terbaik, yaitu nilai 4.0 (A) pada matakuliah X nya.
Yang menjadi pertanyaan adalah, ‘Bagaimana membuat query SQL untuk menampilkan daftar matakuliah yang telah diikuti mahasiswa beserta hasilnya, dengan ketentuan jika ada sebuah matakuliah yang diikuti beberapa kali maka hanya akan ditampilkan sekali yaitu yang memiliki nilai terbaik saja”. Pertanyaan inilah yang akan dibahas pada artikel kali ini.
OK.. untuk membahasnya, ada baiknya kita sajikan terlebih dahulu data-datanya. Dalam kasus ini misalkan terdapat 3 buah tabel yaitu ‘mhs’, ‘mk’ dan ‘ambilmk’. Tabel ‘mhs’ digunakan untuk menyimpan data mahasiswa, ‘mk’ untuk menyimpan data matakuliah-matakuliah, dan ‘ambilmk’ untuk menyimpan data pengambilan matakuliah oleh mahasiswa beserta nilainya.
CREATE TABLE mhs ( nim varchar(10), namamhs varchar(30), alamat text, sex varchar(10), PRIMARY KEY (nim) );
INSERT INTO mhs VALUES ('M0197001', 'ROSIHAN ARI YUANA', 'COLOMADU', 'L');
INSERT INTO mhs VALUES ('M0197002', 'DWI AMALIA FITRIANI', 'KUDUS', 'P');
INSERT INTO mhs VALUES ('M0197003', 'FAZA FAUZAN KH.', 'COLOMADU', 'L');
INSERT INTO mhs VALUES ('M0197004', 'NADA HASANAH', 'COLOMADU', 'P');
INSERT INTO mhs VALUES ('M0197005', 'MUH. AHSANI TAQWIM', 'COLOMADU', 'L');
CREATE TABLE mk ( kodemk varchar(5), namamk varchar(20), sks int(11), smt int(11), PRIMARY KEY (kodemk) ) ;
INSERT INTO mk VALUES ('K001', 'KALKULUS I', 3, 1);
INSERT INTO mk VALUES ('K002', 'KALKULUS II', 3, 2);
INSERT INTO mk VALUES ('K003', 'GEOMETRI', 2, 1);
INSERT INTO mk VALUES ('K004', 'NUMERIK', 3, 2);
CREATE TABLE ambilmk ( nim varchar(10), kodemk varchar(5), smt varchar(6), thajaran varchar(9), nilai float, PRIMARY KEY (nim, kodemk, smt, thajaran) );
INSERT INTO ambilmk VALUES ('M0197001', 'K001', 'GANJIL', '2007/2008', 1);
INSERT INTO ambilmk VALUES ('M0197001', 'K002', 'GANJIL', '2007/2008', 2);
INSERT INTO ambilmk VALUES ('M0197001', 'K003', 'GANJIL', '2007/2008', 3);
INSERT INTO ambilmk VALUES ('M0197002', 'K001', 'GANJIL', '2007/2008', 2);
INSERT INTO ambilmk VALUES ('M0197002', 'K002', 'GANJIL', '2007/2008', 3);
INSERT INTO ambilmk VALUES ('M0197001', 'K001', 'GANJIL', '2008/2009', 2);
INSERT INTO ambilmk VALUES ('M0197001', 'K001', 'GANJIL', '2009/2010', 4);
Dari data pengambilan matakuliah di atas tampak bahwa mahasiswa bernim ‘M0197001′ mengambil matakuliah berkode ‘K001′ beberapa kali, tepatnya 3 kali. Pengambilan pertama dia mendapat 1.0, kedua 2.0 dan ketiga mendapat 4.0.
Sekarang bagaimana cara menulis query SQL untuk menampilkan semua matakuliah yang telah diikuti mahasiswa bernim ‘M0197001′ ini?
OK… misalkan kita gunakan query seperti berikut ini
SELECT nim, kodemk, nilai FROM ambilmk WHERE nim = 'M0197001';
Hasil query di atas adalah
Jika Anda gunakan query di atas maka akan tampak semua matakuliah yang telah diikuti mahasiswa tersebut. Dalam hasil yang diperoleh akan tampak bahwa matakuliah ‘K001′ muncul sebanyak 3 kali dengan nilainya masing-masing. Sehingga penggunaan query di atas belum menampilkan hasil pengambilan matakuliah ‘K001′ secara tunggal dengan nilai tertinggi.
Hmm… yang nilainya tertinggi yah… OK.. berarti kita harus gunakan function MAX(nilai). Tapi eit… tunggu dulu! Nilai tertinggi di sini bukan nilai nilai tertinggi secara umum dari semua matakuliah yang diambil tapi nilai tertinggi dari matakuliah yang sama yang pernah diambilnya. Oleh karena itu dalam query SQL yang kita buat ini nanti harus ada ‘GROUP BY kodemk’
SELECT nim, kodemk, max(nilai) FROM ambilmk WHERE nim = 'M0197001' GROUP BY kodemk;
Hasil query di atas adalah
Yes…. sudah lebih baik sekarang. Dari hasil di atas tampak bahwa untuk nilai ‘K001′ sudah muncul hanya sebuah dengan nilai yang tertinggi.
OK.. next… bagaimana jika kita ingin menampilkan nama masing-masing matakuliahnya dan juga SKS nya? Hmm.. ya berarti kita harus relasikan tabel ‘ambilmk’ dengan ‘mk’.
SELECT ambilmk.nim, ambilmk.kodemk, mk.namamk, mk.sks, MAX(ambilmk.nilai) FROM ambilmk, mk WHERE ambilmk.kodemk = mk.kodemk AND ambilmk.nim = 'M0197001' GROUP BY ambilmk.kodemk;
Hasil query di atas adalah
He..3x mudah bukan membuat query SQL nya. Nah… mudah-mudahan artikel ini bisa membantu Anda yang sedang membuat sistem informasi akademik.
| Baca Juga Artikel Terkait |
Kata kunci: query - SQL -









mas,,saya tertarik niyh atas postingan tentang artikel2 mengenai coding yang mas roihan tulis,,,
membantu saya dalam belajar niyh
mkasih ya mas,,kalo sempat main-main ya mas rosihan ke blog saya,,
terima kasih
to hasi: sama-sama ya mbak/mas… OK kapan2 tak mampir deh
thanx ya Mas Rosi……
udah bnyk membantu…
God Bless You
permisi– aku bukan pengen beri komentar tapi aku pengen tanaya kalo perintah sql delphi simpanan terbanyak apa yach tolong kasi tau donk… penting banget untu tugas akhi q… ok
thanks for all
se you….?
to ricki: simpanan terbanyak gimana maksudnya ya?
Assalamu’laikum, mas gimana caranya kalau kita ingin menampilkan nilai tertinggi tapi dengan string, misalnya nilainya adalah a, b sampai c.
nah tapi masalah yang saya hadapi adalah saya membuat database suatu instansi, disitu terdapat golongan dari mulai I/a, II/a, …./b……/c dan seterusnya sampai IV/d, nah yang saya inginkan adalah bagaiman caranya golongan dengan gol IV/d terdapat pada urutan tertinggi di dalam rekord database dengan otomatis.
@ilham: di dalam tabel ‘golongan’ dikasihkan saja field semacam bilangan bulat yang menunjukkan prioritas level setiap golongan, misal struktur tabelnya sbb:
kemudian nanti untuk menampilkan golongan tertinggi sampai terendah menggunakan SORT BY id nya.. selesai deh..
Assalamu’alaikum
tapi mas apakah id tersebut otomatis atau tidak,
dan masalah lagi setiap pegawai sigolongan terus meningkat mungkin misalnya dari I/a ke I/b atau mungkin langsung diangkat ke IV/e.
nah mungkin kalau pake id mungkin pas waktu entri misalkan I/a mempunyai id 9 apabila sewaktu-waktu dia naik pangkat ke golongan misalnya III/a gimana mas supaya si pegawai tersebut pindah secara otomatis di rekordnya. maaf mas sebelumnya terimasih.
@ilham: wa’alaikumussalaam. Tentunya itu tidak otomatis (autoincrement) karena urutan nomor tsb kan memang ada rulenya mulai dari pangkat terendah sampai tertinggi. Misal golongan I/a -> id=1 dan I/b -> id = 2, sehingga bila ada karyawan yang mula-mula bergolongan I/a dan mau naik pangkat ke I/b otomatis kan tinggal id = id + 1? Sehingga nanti perlu ada 2 tabel misal tabel golongan yang berisi mapping gol dan ID nya, serta tabel karyawan. Nah di tabel karyawan ini, untuk menunjukkan golongan tinggal pake ID dari golongannya saja, sehingga mudah diolah untuk kenaikan pangkat atau penurunan pangkat
Assalamua’alaiku,terimakasih mas atas jawabab mas sangat bermanfaat sekali. tapi apakah si misalnya I/a id=1 dan seterusnya, apakah golongan tersebut di entrikan ya mas, jadi pas naik pangkat kita harus mengedit golongan tersebut setiap kenaikan pangkat berdasarkan nama pegawai pakah begitu mas, maaf nanya terus tapi saya butuh pencerahannya
@ilham: bisa juga dibuat otomatis bila kenaikan pangkat tersebut sudah ada formulanya. Biasanya dengan melihat jumlah angka kreditnya. Untuk itulah mengapa golongannya dibuat numerik 1, 2, … sebagai alias dari golongan I/a, I/b, dst. Dengan numerik, maka pemrosesan untuk naik pangkatnya bisa dibuat otomatis.
nyimak dulu gan…
hheee
tutorialnya mentep2 nich, langsung studi kasus..
penjelasannya mas simple tp tetep mudah dimengerti…
btw mas anak kaskus ya.. ID mas apa? boleh tahu kan..
@husni: thanks Gan… he 3x iya Gan, ane juga kaskuser. Coba disearch aja ya nama saya di kaskus. nanti ketemu kok.
thanx master…. this tutorial save from hell
Bismillah, Makasih mas atas tutorialnya,…^_^. Mw nanya mas, kalo mw nampilin nilai tertingginya di crystal report perintahnya dimana kita masukin,.. or ada solusi lain mas… makasih…