Kumpulan data (aggregation of data) diproses oleh multiple-row function untuk menghasilkan data-data yang digunakan untuk pelaporan. Multiple-row function ini dapat juga disebut sebagai aggregate function atau group function (dalam tulisan ini, kita memakai istilah group function). Dalam SQL, group function mengolah sekumpulan baris untuk kemudian mengembalikan sebuah nilai per group-nya. Masing-masing group dapat merepresentasikan tabel atau bagian tabel. Sintaks dasar group function:

SELECT [<kolom1>,] <group function>(<kolom2>)
FROM <table list>
GROUP BY <kolom1>
HAVING <kolom2><operator pembanding><nilai>

Dari sintaks tersebut, dapat dilihat bahwa kita bisa menggunakan group function pada kolom <kolom2> bersamaan dengan SELECT pada kolom lain <kolom1>. Karena adanya <kolom1>, maka kita harus melakukan pengelompokan berdasarkan <kolom1>pada GROUP BY. Sebagai informasi tambahan, pengelompokan bisa dilakukan pada kolom lain yang tidak ada pada <select list>. Segala bentuk kondisi dalam group function diproses pada HAVING dengan komposisi kondisi yang sama seperti WHERE.

Dalam membentuk aggregation, ada beberapa acuan yang dapat dipakai antara lain:

  1. Penggunaan DISTINCT membuat nilai yang diproses adalah nilai yang berbeda dari nilai lainnya. ALL merupakan default dan hal ini tidak perlu diubah.
  2. Tipe data yang dapat diproses oleh group function adalah CHAR, VARCHAR, NUMERIC, dan DATE.
  3. Semua group function mengabaikan nilai NULL. Agar nilai ini tetap diolah, gunakan ISNULL atau COALESCE.

Beberapa macam group function, antara lain:

  1. AVG(), atau average, yang digunakan untuk menghitung rata-rata nilai
  2. COUNT() digunakan utnuk menghitung jumlah baris data
  3. MAX() digunakan untuk mencari nilai tertinggi
  4. MIN() digunakan untuk mencari nilai terendah
  5. SUM(), atau summary, yang digunakan untuk menghitung jumlah nilai

Contoh pemakaian group function:

SELECT AVG(Nilai_Akhir), SUM(Nilai_Akhir), MAX(Nilai_Akhir),
MIN(Nilai_Akhir), COUNT(*)
FROM Nilai

Pengelompokan data

Baris dalam tabel dapat dibagi-bagi kedalam kelompok-kelompok yang lebih kecil menggunakan GROUP BY. Beberapa aturan dalam GROUP BY:

  • Jika ada group function dalam <select list>, kolom-kolom yang tidak memiliki group function harus masuk kedalam GROUP BY.
  • Dengan menggunakan WHERE, kita bisa mengabaikan baris-baris tertentu sebelum dilakukan pembagian.
  • Isi dari GROUP BY adalah kolom, bukan alias.

Sebagai contoh, kita ingin menghitung jumlah SalesQuota dan membaginya kedalam teritori. Perhitungan dilakukan untuk SalesQuota yang sudah memiliki teritori. Dengan begitu, setelah dilakukan pengurangan baris data (adanya WHERE), SQL Server melakukan perhitungan jumlah SalesQuota untuk masing-masing teritori. Perhatikan query berikut ini:

SELECT TerritoryID, SUM(ISNULL(SalesQuota,0)) [Total]
FROM Sales.SalesPerson
WHERE TerritoryID IS NOT NULL
GROUP BY TerritoryID;

Membatasi hasil group function

Sama seperti WHERE, kita membutuhkan kondisi-kondisi di saat-saat tertentu untuk membatasi hasil dari group function. Nah, untuk melakukan hal ini, ada HAVING. Perhatikan contoh pada query berikut:

SELECT TerritoryID, SUM(ISNULL(SalesQuota,0)) [Total]
FROM Sales.SalesPerson
WHERE TerritoryID IS NOT NULL
GROUP BY TerritoryID
HAVING SUM(ISNULL(SalesQuota,0)) > 400000;

Dalam contoh tersebut, dilakukan pembatasan hanya untuk jumlah SalesQuota lebih besar dari 400000. Jumlah SalesQuota ini ada dalam <select list>. Namun, kita juga bisa memberikan kondisi untuk group function yang tidak ada dalam <select list>.

Semoga bermanfaat…