Wednesday, April 11, 2012

Menampilkan Rangking Umum dengan Mysql Query

Untuk mendapatkan juara umum data nilai siswa perlu di jumlahkan dan dirata-ratakan. Yang berarti diperlukan table nilai siswa dan tabel kelas/mata pelajaran yang di ambil. Misalnya kedua table tersebut adalah

Table Kelas

id_siswakelas id_siswa Kelas
1 aa IA
2 bb IA
3 cc IA
4 dd IB
5 ee IB


Table Nilai
id_nilai id_siswa id_mapel Nilai
1
aa
Math
8
2
bb
Math
7
3
cc
Math
8
4
dd
Math
6
5
ee
Math
7
6
aa
Biologi
8
7
bb
Biologi
8
8
cc
Biologi
7
9
dd
Biologi
6
10
ee
Biologi
7



Langkah I
Mencari nilai rata-rata tiap siswa untuk mata plajarannya
select id_siswa, avg( nilai ) as rerata
from Nilai
group by id_siswa, id_mapel
[query I]




Query tersebut akan menghasilkan data

Query I
Id_siswa rerata
aa
8
bb
7.5
cc
7.5
dd
6
ee
7


Langkah II
Langkah berikutnya adalah menampilkan kelas dan mengurutkan berdasarkan kelasnya

select b.kelas, a.id_siswa, avg( nilai ) as rerata
from Nilai a
inner join Kelas b on b. id_siswa =a.id_siswa
group by a.id_siswa, id_mapel
[query II]


ini akan menghasilkan

Kelas Id_siswa rerata
IA
aa
8
IA
bb
7.5
IA
cc
7.5
IB
dd
6
IB
ee
7


Untuk mengurutkannya dengan perintah order by, kita bisa menganggap hasil queri II tersebut adalah sebuah  table nanti akan kita beri alias sebagai tableQ dan berikutnya diurutkan,

select kelas, id_siswa, rerata
from (

  select b.kelas, a.id_siswa, avg( nilai ) as rerata
  from Nilai a
  inner join Kelas b on b. id_siswa =a.id_siswa
  group by a.id_siswa, id_mapel

) as tableQ
order by kelas, rerata
[query III]

trik penggunaan hasil query sebagai table inilah yang dikenal dengan subquery. Jika diperhatikan ada dua buah order by, yaitu kelas dan rerata. Disini berarti data diurutkan dulu berdasarkan kelasnya, selanjutnya dlam posisi data yang berurut tersebut kemudian diurutkan lagi berdasarkan rata-rata nilai.

perhatikan juga select pada query utama mengacu pada nama-nama alias didalam subquery.

hasil dari query III akan sebagai berikut

KelasId_siswarerata
IAaa
8
IAbb
7.5
IAcc
7.5
IBee
7
IBdd
6



No comments:

Post a Comment

Popular Posts