About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • SQL
  • /
  • Query SQL Untuk Menampilkan Index Prestasi (IP) Per Semester
SQL

Query SQL Untuk Menampilkan Index Prestasi (IP) Per Semester

Bagi Anda yang sedang membuat sistem informasi akademik dan merasa kesulitan dengan bagaimana cara menampilkan nilai Index Prestasi (IP) mahasiswa untuk setiap semesternya, mudah-mudahan artikel ini berguna.

Ide menulis artikel ini muncul sewaktu perjalanan menuju my campus 🙂 Mohon maaf kepada pengunjung setia blog ini, selama beberapa hari yang cukup lama saya tidak mengupdate artikel blog karena kesibukan saya, baik di rumah maupun di kampus. Waduh… serasa urusan gak pernah selesai-selesai. Ya… itulah urusan duniawi 🙂 Nah.. sekarang fokus ke urusan akhirat, yaitu dakwah melalui ilmu yang saya bagi (meski yang didakwahkan bukan ilmu agama), It doesn’t matter 🙂

OK… dalam artikel ini akan saya coba kupas bagaimana membuat query SQL untuk menampilkan Index Prestasi mahasiswa untuk setiap semester yang telah ditempuhnya. Query ini pasti terdapat dalam sebuah sistem informasi akademik untuk menginformasikan track record akademik seorang mahasiswa yang telah menempuh perkuliahan.

Misalkan kita memiliki tabel matakuliah (‘mk’) dan pengambilan matakuliah (‘ambilmk’) dalam database sebagai berikut

CREATE TABLE mk (
  kodeMK varchar(5),
  namaMK varchar(20),
  sks int(11),
  PRIMARY KEY(kodeMK)
)

CREATE TABLE ambilmk (
  nim varchar(5),
  kodeMK varchar(5),
  nilai float,
  smt varchar(10),
  tahun varchar(9),
  PRIMARY KEY  (nim, kodeMK, smt, tahun),
) 

disertai dengan record untuk masing-masing tabel sbb:

INSERT INTO `ambilmk` VALUES ('M002', 'MK01', '3', 'GANJIL', '2008/2009');
INSERT INTO `ambilmk` VALUES ('M002', 'MK02', '4', 'GANJIL', '2008/2009');
INSERT INTO `ambilmk` VALUES ('M002', 'MK03', '3', 'GENAP', '2008/2009');
INSERT INTO `ambilmk` VALUES ('M002', 'MK04', '4', 'GENAP', '2008/2009');
INSERT INTO `ambilmk` VALUES ('M002', 'MK05', '4', 'GANJIL', '2009/2010');

INSERT INTO `mk` VALUES ('MK01', 'DATABASE', '3');
INSERT INTO `mk` VALUES ('MK02', 'PEMROGRAMAN DASAR', '2');
INSERT INTO `mk` VALUES ('MK03', 'PEMROGRAMAN WEB', '4');
INSERT INTO `mk` VALUES ('MK04', 'OOP', '3');
INSERT INTO `mk` VALUES ('MK05', 'PEMROGRAMAN VISUAL', '3');

Keterangan:

Di dalam tabel ‘ambilmk’ terdapat field ‘smt’ yang digunakan untuk memberi keterangan pada semester apa (genap/ganjil) si mahasiswa mengambil matakuliah tersebut. Sedangkan field ‘tahun’ menunjukkan tahun ajarannya.

OK… sekarang bagaimana dengan bentuk query SQL nya. Untuk mencari IP, tentu kita harus tahu dulu formulanya, yaitu

IP = sum(sks x nilai)/sum(sks)

atau hasil dari penjumlahan sks x nilai matakuliah yang telah diambil dibagi dengan jumlah sks matakuliah tersebut.

Nah… sekarang kita terapkan formula tersebut ke dalam query SQL. Dalam hal ini kita akan menampilkan hasil querynya dalam bentuk SMT, TAHUN, IP.

But… tunggu dulu. Field ‘nilai’ ada di tabel ‘ambilmk’ sedangkan field ‘sks’ ada di tabel ‘mk’. So… gimana donk? …. Lho apanya yang gimana? kan kita bisa relasikan kedua tabel melalui field ‘kodemk’. So… no problem kan? 🙂

SELECT smt, tahun, sum(sks * nilai)/sum(sks) as IP
FROM ambilmk, mk
WHERE ambilmk.kodemk = mk.kodemk AND nim = 'M002'
GROUP BY tahun, smt

Query SQL di atas akan mencoba menampilkan IP mahasiswa bernim ‘M002’ untuk setiap semester dan tahun ajarannya.

Mungkin Anda bertanya, mengapa dalam query SQL perlu diberikan GROUP BY tahun, smt? Ya… karena query ini tujuannya adalah menampilkan IP setiap tahun dan semesternya. Sehingga perhitungan nilai untuk menghasilkan IP juga harus perlu dikelompokkan berdasarkan tahun dan semesternya.

Hasil query di atas akan menghasilkan output seperti di bawah ini

Photobucket

Trus.. mungkin Anda bertanya lagi, apakah perintah ‘GROUP BY tahun, smt’ nya harus seperti itu? Maksudnya, bisakah dibalik menjadi ‘GROUP BY smt, tahun’? Jawabannya adalah ‘NO PROBLEM’. Hasilnya tetap sama, namun yang berbeda adalah tampilannya saja. Bila Anda menggunakan ‘GROUP BY smt, tahun’ maka pengelompokan diprioritaskan pada semester, sehingga dalam tampilannya menjadi seperti di bawah ini

Photobucket

Anda lihat bahwa pada hasil di atas, jika digunakan ‘GROUP BY smt, tahun‘ maka nama semester yang sama akan mengumpul menjadi satu (dalam baris yang berurutan).

Sekarang Anda coba bandingkan dengan gambar pertama yang merupakan hasil dari penggunaan ‘GROUP BY tahun, smt‘. Dalam gambar tersebut tampak bahwa tahun yang sama akan mengumpul menjadi satu (dalam baris yang berurutan). Nah.. tentunya tampilan yang lebih baik adalah tampilan pada gambar pertama di atas yang menggunakan ‘GROUP BY tahun, smt‘.

OK.. mudah-mudahan sedikit artikel ini berguna buat Anda yang sedang belajar SQL maupun yang sedang membuat sistem informasi akademik.

 

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply