11.07.2015 Views

Group Function

Group Function

Group Function

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

4Melaporkan Data AgregetMenggunakan <strong>Group</strong> <strong>Function</strong>s


TujuanSetelah menyelesaikan pelajaran ini, Anda akan dapatmelakukan hal­hal berikut ini :Mengenali <strong>Group</strong> functions yang adaMenjelaskan kegunaan dari <strong>Group</strong> functionsMengelompokan data dengan menggunakan klausa GROUPBYMemasukkan atau mengeluarkan baris­baris terkelompokdengan menggunakan klausa HAVINGTujuanPelajaran ini ditujukan pada fungsi­fungsi lebih lanjut. Fokusnya pada perolehan informasi ringkas(seperti rata­rata) untuk baris­baris terkelompok. Pelajaran ini mendiskusikan bagaimanamengelompokkan baris­baris dalam suatu tabel menjadi sekelompok kecil dan bagaimana untukmenentukan kriteria pencarian untuk baris­baris terkelompok.Oracle Database 10g: SQL Fundamentals I 4­2


Apakah <strong>Group</strong> <strong>Function</strong> Itu ?<strong>Group</strong> function beroperasi pada sekelompok baris­baris untukmemberikan satu hasil per kelompok.<strong>Group</strong> <strong>Function</strong>sTidak seperti single­row function, group function beroperasi pada sekelompok baris­baris untukmemberikan satu hasil per kelompok. Kelompok­kelompok ini mungkin terdiri dari seluruh tabelatau tabel yang terpisah ke dalam pengelompokkan.Oracle Database 10g: SQL Fundamentals I 4­3


Tipe­Tipe <strong>Group</strong> <strong>Function</strong>sAVGCOUNTMAXMINSTDDEVSUMVARIANCETipe­Tipe <strong>Group</strong> <strong>Function</strong>sSetiap fungsi­fungsi menerima suatu argumen. Tabel berikut menunjukkan pilihan­pilihan yang dapatAnda gunakan di dalam sintak :FungsiAVG( [DISTINCT | ALL] n)COUNT ( { * | [DISTINCT |ALL] expr})MAX ( [DISTINCT | ALL]expr)MIN ( [DISTINCT | ALL]expr)STDDEV ( [DISTINCT | ALL]x)SUM ( [DISTINCT | ALL] n)VARIANCE ( [DISTINCT |ALL] x)KeteranganRata­rata nilai dari suatu n, mengabaikan nilai­nilainullJumlah baris­baris, dimana expr memeriksa kesesuatu yang lain dari pada null (menghitung semuabaris­baris yang dipilih menggunakan *, termasukduplikat­duplikat dan baris­baris null)Nilai maksimum dari expr, mengabaikan nilai­nilainullNilai minimum dari expr, mengabaikan nilai nullStandar deviasi dari n, mengabaikan nilai­nilai nullNilai­nilai penjumlahan dari n, mengabaikan nilainilainullVarian dari n, mengabaikan nilai­nilai nullOracle Database 10g: SQL Fundamentals I 4­4


<strong>Group</strong> <strong>Function</strong>s : SintakPedoman­pedoman Untuk Menggunakan <strong>Group</strong> <strong>Function</strong>sDISTINCT membuat suatu fungsi hanya mencakup nilai­nilai yang tidak sama(nonduplicate);ALL membuatnya mencakup setiap nilai, termasuk duplikat­duplikat.Default­nya adalah ALL dan karena itu tidak perlu ditentukan.Tipe data­tipe data untuk fungsi­fungsi dengan suatu argumen expr mungkin CHAR,VARCHAR2, NUMBER, atau DATE.Semua <strong>Group</strong> functions mengabaikan nilai­nilai null. Untuk mengganti suatu nilai untuknilai­nilai null, gunakanlah fungsi­fungsi NVL, NVL2, atau COALESCE.Oracle Database 10g: SQL Fundamentals I 4­5


Menggunakan Fungsi­Fungsi AVG dan SUMAnda dapat menggunakan AVG dan SUM untuk data numerik.Menggunakan <strong>Group</strong> <strong>Function</strong>sAnda dapat menggunakan fungsi­fungsi AVG, SUM, MIN, dan MAX pada kolom­kolom yangdapat menyimpan data numerik. Contoh pada slide menampilkan penghasilan rata­rata, tertinggi,terendah, dan total penghasilan bulanan untuk semua sales representative.Oracle Database 10g: SQL Fundamentals I 4­6


Menggunakan Fungsi­Fungsi MIN dan MAXAnda dapat menggunakan MIN dan MAX untuk tipe­tipe datanumeric, character, dan date.Menggunakan <strong>Group</strong> <strong>Function</strong> (lanjutan)Anda dapat menggunakan fungsi MAX dan MIN untuk tipe data­tipe data numeric, character, dandate. Contoh pada slide menampilkan pegawai yang paling baru dan paling lama.Contoh berikut ini menampilkan nama belakang pegawai yang pertama dan nama belakangpegawai yang terakhir dalam suatu daftar abjad dari semua pegawai :SELECT MIN(last_name), MAX(last_name)FROM employees;AbelMIN (LAST_NAME)ZlotkeyMAX (LAST_NAME)Catatan : Fungsi­fungsi AVG, SUM, VARIANCE, dan STDDEV hanya dapat digunakan pada tipe datanumeric, MAX dan MIN tidak dapat digunakan pada tipe data­tipe data LOB atau LONG.Oracle Database 10g: SQL Fundamentals I 4­7


Menggunakan Fungsi COUNTCOUNT (*) mengembalikan jumlah baris­baris dalam suatutabel :COUNT (expr) mengembalikan jumlah baris­baris non­nulluntuk suatu expr :Fungsi COUNTFungsi COUNT memiliki tiga format : COUNT (*) COUNT (expr) COUNT (DISTINCT expr)COUNT (*) mengembalikan jumlah baris­baris dalam suatu tabel yang memenuhi kriteria daripernyataan SELECT, termasuk baris­baris yang sama dan baris­baris yang berisi nilai­nilai null disetiap kolom.Jika suatu klausa WHERE adalah termasuk dalam pernyataan SELECT, COUNT (*)mengembalikan jumlah dari baris­baris yang memenuhi kondisi klausa WHERE.Yang membedakannya, COUNT (expr) mengembalikan jumlah dari nilai­nilai non­null yangberada dalam kolom yang diidentifikasi oleh expr.COUNT (DISTINCT expr) mengembalikan jumlah dari nilai­nilai yang unik ,non­null yang adadalam kolom diidentifikasi oleh expr.Contoh :1. Contoh pada slide menampilkan jumlah dari pegawai di department 502. Contoh pada slide menampilkan jumlah dari pegawai di department 80 yang mendapat suatukomisi.Oracle Database 10g: SQL Fundamentals I 4­8


Menggunakan Kata Kunci DISTINCTCOUNT(DISTINCT expr)mengembalikan jumlah dari nilainilainon­null berbeda dari expr.Untuk menampilkan jumlah dari nilai­nilai departemenberbeda dalam tabel EMPLOYEES :Menggunakan Kata Kunci DISTINCTGunakan kata kunci DISTINCT untuk menghilangkan penghitungan terhadap nilai­nilai yangsama dalam suatu kolom.Contoh pada slide menampilkan jumlah hanya departemen tertentu pada tabel EMPLOYEES.Oracle Database 10g: SQL Fundamentals I 4­9


<strong>Group</strong> <strong>Function</strong>s dan Nilai­Nilai Null<strong>Group</strong> functions mengabaikan nilai­nilai null dalam suatukolom :Fungsi NVL memaksa group functions untuk menyertakannilai­nilai null :<strong>Group</strong> <strong>Function</strong>s dan Nilai­Nilai NullSemua group functions mengabaikan nilai­nilai null dalam kolom.Fungsi NVL memaksa group functions untuk menyertakan nilai­nilai null.Contoh:1. Rata­rata dihitung berdasarkan hanya pada baris­baris dalam suatu tabel yang menyimpannilai yang valid di kolom COMMISION_PCT. Rata­rata dihitung sebagai total komisi yangdibayarkan ke semua pegawai dibagi dengan jumlah pegawai yang menerima komisi(empat).2. Rata­rata dihitung berdasarkan semua baris­baris dalam suatu tabel, tidak peduli apakahnilai­nilai di kolom COMMISION_PCT null atau bukan. Rata­rata dihitung sebagai totalkomisi yang dibayarkan ke semua pegawai dibagi dengan jumlah total pegawai dalamperusahaan (20).Oracle Database 10g: SQL Fundamentals I 4­10


Membuat Kelompok­Kelompok DataMembuat Kelompok­kelompok DataSampai poin diskusi kita ini, semua group functions sudah memperlakukan tabel sebagaisekelompok besar informasi.Suatu saat, bagaimanapun, Anda perlu untuk membagi informasi kedalam kelompok­kelompokyang lebih kecil. Ini dapat dilakukan dengan menggunakan suatu klausa GROUP BY.Oracle Database 10g: SQL Fundamentals I 4­11


Membuat Data­Data Terkelompok :Sintak Klausa GROUP BYAnda dapat membagi baris­baris dalam suatu tabel kedalamsekelompok kecil dengan menggunakan klausa GROUP BY.Klausa GROUP BYAnda dapat menggunakan klausa GROUP BY untuk membagi baris­baris dalam suatu tabelmenjadi kelompok­kelompok. Kemudian Anda dapat menggunakan group functions untukmengembalikan informasi ringkas untuk setiap kelompok.Dalam sintak :<strong>Group</strong>_by_expressionkolom­kolom tertentu yang nilai­nilainya menentukan dasar untukpengelompokan baris­barisPedoman­pedoman Jika anda menyertakan group functions pada klausa SELECT, anda tidak dapat memilih hasil­hasilsecara individu dengan baik, kecuali kolom individu muncul pada klausa GROUP BY. Anda akanmenerima pesan kesalahan jika anda keliru menyertakan daftar kolom di klausa GROUP BY. Menggunakan klausa WHERE, anda dapat mengeluarkan baris­baris sebelum membaginya kedalamkelompok­kelompok. Anda harus menyertakan kolom­kolom dalam klausa GROUP BY. Anda tidak dapat menggunakan kolom alias dalam klausa GROUP BY.Oracle Database 10g: SQL Fundamentals I 4­12


Menggunakan Klausa GROUP BYSemua kolom pada daftar SELECT yang bukan groupfunctions harus ada pada klausa GROUP BY.Menggunakan Klausa GROUP BYKetika menggunakan klausa GROUP BY, pastikan bahwa semua kolom pada daftar SELECT yangbukan group functions disertakan pada klausa GROUP BY. Contoh pada slide menampilkan nomordepartemen dan rata­rata penghasilan untuk tiap departemen. Berikut ini adalah bagaimanapernyataan SELECT, beserta klausa GROUP BY, dievaluasi : Klausa SELECT menentukan kolom­kolom yang akan diambil, sebagai berikut :­ Kolom nomor departement dalam tabel EMPLOYEES­ Rata­rata dari semua penghasilan dalam suatu kelompok yang ditentukan olehklausa GROUP BY. Klausa FROM menentukan tabel­tabel yang harus diakses database : tabel EMPLOYEES. Klausa WHERE menentukan baris­baris yang akan diambil. Karena tidak ada klausa WHERE,semua baris secara default akan diambil. Klausa GROUP BY menentukan bagaimana baris­baris akan dikelompokkan. Baris­barisdikelompokkan berdasarkan nomor departemen, jadi fungsi AVG yang diterapkan pada kolompenghasilan akan menghitung rata­rata gaji untuk tiap departemen.Oracle Database 10g: SQL Fundamentals I 4­13


Menggunakan Klausa GROUP BYKolom GROUP BY tidak harus ada pada daftar SELECT.Menggunakan Klausa GROUP BY (lanjutan)Kolom GROUP BY tidak harus ada pada klausa SELECT. Sebagai contoh, pernyataan SELECTpada slide menampilkan rata­rata penghasilan tiap departemen tanpa menampilkan nomormasing­masing departemen. Tanpa nomor­nomor departemen, bagaimanapun, hasilnya akanmenjadi tidak ada artinya.Anda dapat menggunakan group functions pada klausa ORDER BY:SELECTFROMGROUP BYORDER BYdepartment_id, AVG(salary)employeesdepartment_idAVG(salary);. . .8 rows selected.DEPARTMENT_IDAVG(SALARY)50 350010 440060 640090 19333.3333Oracle Database 10g: SQL Fundamentals I 4­14


Mengelompokkan dengan Lebih dari Satu KolomKelompok Dalam KelompokKadang­kadang Anda perlu untuk melihat hasil untuk kelompok dalam kelompok. Slidemenampilkan suatu laporan yang menunjukkan total penghasilan yang dibayarkan pada masingmasingjob di tiap departemen.Tabel EMPLOYEES dikelompokkan terlebih dahulu berdasarkan nomor departemen dan kemudianpengelompokkan berdasarkan job. Sebagai contoh, empat petugas stok di departemen 50dikelompokkan bersama, dan suatu hasil tunggal (total penghasilan) dihasilkan untuk semuapetugas stok dalam kelompok tersebut.Oracle Database 10g: SQL Fundamentals I 4­15


Menggunakan Klausa GROUP BY pada Multiple KolomKelompok Dalam Kelompok (lanjutan)Anda dapat mengembalikan hasil ringkasan untuk kelompok dan sub­kelompok dengan mendaftarlebih dari satu kolom GROUP BY. Anda dapat menentukan default urutan pernyortiran suatu hasilberdasarkan urutan kolom­kolom pada klausa GROUP BY. Contoh pada slide, pernyataanSELECT yang menyertakan sebuah klausa GROUP BY yang dievalusi sebagai berikut: Klausa SELECT menentukan kolom yang akan diambil :­ Nomor departement dalam tabel EMPLOYEES­ Job ID dalam tabel EMPLOYEES­ Total semua penghasilan dalam kelompok yang Anda tentukan pada klausa GROUPBY. Klausa FROM menentukan tabel­tabel yang harus diakses database : tabel EMPLOYEES. Klausa GROUP BY menentukan bagaimana Anda harus mengelompokkan baris­baris :­ Pertama, baris­baris dikelompokkan berdasarkan nomor departemen.­ Kedua, baris­baris dikelompokkan berdasar job ID dalam kelompok­kelompoknomor departemen.Jadi fungsi SUM diterapkan ke kolom penghasilan untuk semua job ID di tiap kelompok nomordepartemen.Oracle Database 10g: SQL Fundamentals I 4­16


Query­Query Ilegal Menggunakan <strong>Group</strong> <strong>Function</strong>sBeberapa kolom atau ekpresi pada daftar SELECT yang bukanfungsi agreget harus ada dalam klausa GROUP BY :Kolom tidak ada pada klausa GROUP BYQuery­Query Ilegal Menggunakan <strong>Group</strong> <strong>Function</strong>sKapanpun Anda menggunakan suatu campuran dari item­item individual (DEPARTMENT_ID)dan group function (COUNT) pada pernyataan SELECT yang sama, Anda harus menyertakansuatu klausa GROUP BY yang menentukan item­item individu (dalam kasus ini,DEPARTMENT_ID). Jika klausa GROUP BY tidak ada, maka muncul pesan kesalahan “not asingle­group group function”dan sebuah asterisk (*) akan menunjuk kepada kolom yangbermasalah. Anda dapat memperbaiki kesalahan pada slide dengan menambahkan klausa GROUPBY :SELECTFROMGROUP BYdepartment_id, count(last_name)employeesdepartment_id;. . .8 rows selectedDEPARTEMENT_IDCOUNT(LAST_NAME)10 120 21Setiap kolom atau ekspresi pada daftar SELECT yang bukan merupakan fungsi agreget harus adapada klausa GROUP BY.Oracle Database 10g: SQL Fundamentals I 4­17


Query­Query Ilegal Menggunakan <strong>Group</strong> <strong>Function</strong>sAnda tidak bisa menggunakan klausa WHERE untukmembatasi kelompok­kelompok.Anda gunakan klausa HAVING untuk membatasi (restrict)kelompok­kelompok.Anda tidak bisa menggunakan group functions padaklausa WHERE.Klausa WHERE tidak bisa digunakan untuk membatasi kelompok­kelompokQuery­Query Ilegal Menggunakan <strong>Group</strong> <strong>Function</strong>s (lanjutan)Klausa WHERE tidak dapat digunakan untuk membatasi kelompok. Pernyataan SELECT padacontoh slide menghasilkan suatu kesalahan karena klausa WHERE­nya digunakan untukmembatasi hasil rata­rata penghasilan dari departemen­departemen yang memiliki rata­ratapenghasilan di atas $8.000.Anda dapat memperbaiki kesalahan pada contoh dengan menggunakan klausa HAVING untukmembatasi kelompok­kelompok :SELECT department_id, AVG(salary)FROM employeesHAVING AVG(salary) > 8000GROUP BY department_id;DEPARTMENT_IDAVG(SALARY)20 950080 10033.333390 19333.3333110 10150Oracle Database 10g: SQL Fundamentals I 4­18


Membatasi Hasil­Hasil PengelompokkanMembatasi Hasil­hasil PengelompokkanDengan cara yang sama Anda gunakan klausa WHERE untuk membatasi baris­baris yang Andapilih, begitupula Anda gunakan klausa HAVING untuk membatasi pengelompokkan. Untukmencari penghasilan maksimum pada setiap departemen yang memiliki penghasilan maksimumlebih besar dari $10.000, Anda perlu melakukan hal­hal berikut:1. Cari rata­rata penghasilan untuk setiap departemen dengan mengelompokkan berdasarkannomor departemen.2. Membatasi pengelompokkan ke departemen­departemen tersebut dengan penghasilanmaksimum lebih besar dari $10.000.Oracle Database 10g: SQL Fundamentals I 4­19


Membatasi Hasil­hasil Pengelompokkandengan Klausa HAVINGSaat Anda menggunakan klausa HAVING, server Oracle membatasipengelompokkan sebagai berikut :1. Baris­baris dikelompokkan.2. <strong>Group</strong> <strong>Function</strong> diterapkan.3. Pengelompokkan yang memenuhi klausa HAVINGditampilkan.Membatasi Hasil­Hasil Pengelompokkan dengan Klausa HAVINGAnda menggunakan klausa HAVING untuk menentukan pengelompokkan­pengelompokkan yangakan ditampilkan, lebih jauh lagi membatasi pengelompokkan berdasarkan informasi agreget.Dalam sintak, group_condition mengembalikan baris­baris pengelompokkan tertentu kepengelompokkan tersebut yang memenuhi kondisi true.Server Oracle melakukan langkah­langkah berikut ketika Anda menggunakan klausa HAVING:1. Baris­baris dikelompokkan2. Suatu <strong>Group</strong> function diterapkan pada pengelompokkan3. Suatu pengelompokkan yang memenuhi kriteria pada klausa HAVING ditampilkanKlausa HAVING dapat mendahului klausa GROUP BY, tetapi disarankan bahwa Andamenempatkan GROUP BY lebih dulu karena lebih logis. Pengelompokkan adalah kondisi dan groupfunctions dihitung sebelum klausa HAVING diterapkan ke pengelompokkan pada daftar SELECT.Oracle Database 10g: SQL Fundamentals I 4­20


Menggunakan Klausa HAVINGPenggunaan Klausa HAVINGContoh pada slide menampilkan nomor­nomor departemen dan penghasilan maksimum untukdepartemen­departemen dengan penghasilan suatu maksimum lebih dari $10.000Anda dapat menggunakan klausa GROUP BY tanpa menggunakan group function pada daftarSELECT.Jika Anda membatasi baris­baris berdasarkan hasil dari suatu group function, Anda harusmenggunakan klausa GROUP BY sebagaimana klausa HAVING.Contoh berikut menampilkan nomor­nomor departemen dan penghasilan rata­rata untukdepartemen­departemen dengan suatu penghasilan maksimum lebih besar dari $10.000SELECTFROMGROUP BYHAVINGdepartment_id, AVG(salary)employeesdepartment_idmax(salary)>10000;DEPARTMENT_IDAVG(SALARY)20 950080 10033.333390 19333.3333110 10150Oracle Database 10g: SQL Fundamentals I 4­21


Menggunakan Klausa HAVINGPenggunaan Klausa HAVING (lanjutan)Contoh pada slide menampilkan job ID dan total penghasilan bulanan untuk setiap pekerjaan yangmemiliki suatu total daftar penghasilan melebihi $13.000. Contoh tersebut tidak menyertakan parasales representative dan daftar disortir berdasarkan total penghasilan bulanan.Oracle Database 10g: SQL Fundamentals I 4­22


<strong>Group</strong> <strong>Function</strong>s BersarangMenampilkan penghasilan rata­rata tertinggi :<strong>Group</strong> <strong>Function</strong>s Bersarang<strong>Group</strong> functions dapat disarangkan hingga 2 kedalaman. Contoh pada slide menampilkanpenghasilan rata­rata tertinggi.Oracle Database 10g: SQL Fundamentals I 4­23


RingkasanDalam pelajaran ini, ada sudah mempelajari bagaimana : Menggunakan group functions COUNT, MAX, MIN dan AVG Menulis query­query yang menggunakan klausa GROUP BY Menulis query­query yang menggunakan klausa HAVINGRingkasanBeberapa group function ada dalam SQL, seperti berikut ini :AVG, COUNT, MAX, MIN, SUM, STDDEV, dan VARIANCEAnda dapat membuat sub­pengelompokkan dengan menggunakan GROUP BY. Pengelompokkandapat dibatasi menggunakan klausa HAVING.Tempatkan klausa­klausa HAVING dan GROUP BY setelah klausa WHERE dalam suatu pernyataan.Urutan dari klausa­klausa HAVING dan GROUP setelah WHERE tidak penting. Tempatkan klausaORDER BY diakhir.Server Oracle memeriksa klausa­klausa dengan urutan sebagai berikut :1. Jika pernyataan mengandung klausa WHERE, server membentuk baris­baris kandidat.2. Server mengidentifikasi pengelompokkan yang ditentukan pada klausa GROUP BY.3. Klausa HAVING lebih jauh membatasi hasil pengelompokkan yang tidak memenuhi kriteriapada klausa HAVING.Catatan : Untuk daftar lengkap dari group functions, lihat Oracle SQL Reference.Oracle Database 10g: SQL Fundamentals I 4­24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!