Aggregate Functions dan As

Kalau kalian perah menggunakan Ms. excel kalian mungkin pernah menggunaan Sum, average, min, max, dan, count. Dalam SQL, fungsi-fungsi tersebut disebut dengan agregate functions. Aggregate functions adalah fungsi yang menghasikan satu nilai berdasarkan isi atau informasi dari dari beberapa baris data. Sintaks penulisannya untuk statement select bisa kalian lihat di bawah ini.

  • Select aggregate_function (nama_kolom) as nama_hasil from nama_tabel

Kalau kalian belum pernah menggunakan fungsi-fungsi tersebut, kalian bisa melihat penjelasan dari kegunaannya di bawah ini.

  • Sum : Mendapatkan total nilai dari kolom yang dicari.
  • Avg : Mendapatkan rata-rata dari kolom yang dicari.
  • Count : Mendapatkan banyaknya dari kolom yang dicari.
  • Min : Nilai minimal
  • Max : Nilai maksimal

Contoh Query

  • Select SUM (nilai) AS total From siswa
  • Select SUM (nilai) AS total, AVG (nilai) AS rata_rata, COUNT (nilai) AS jdata, min(nilai) AS minimum, max(nilai) as maksimum FROM siswa

Aggregate Functions bisa digunakan pada posisi nama kolom dari statement select. Selain itu, aggregate functions juga bisa digunakan sebagai kondisi dari where. Nilai yang didapat bisa disimpan dengan klausa As dan diperlakukan seperti sebuah "kolom" saat menggunakan callback atau sqlite3_column_*.
//install librarynya kalau belum ada
#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

int callback(void *notused, int jkolom, char **dataku, char **kolom){
   printf("%s", dataku[0]);
   printf("\n");
   return 0;
}

void isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[3][3]={{"Geri", "Saribumi", "75"}, {"Panji", "Wonokarto", "95"}, {"Tomi", "Gading", "80"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, alamat Text, nilai INTEGER);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<3;i++){
        sprintf(query, "INSERT INTO siswa(id, nama, alamat, nilai) VALUES('%d','%s', '%s', '%s')", i, data[i][0], data[i][1], data[i][2]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
    int res=0;
    sqlite3 *conn=NULL;
    sqlite3_stmt *stmt=NULL;
    sqlite3_open("databaseku.dat", &conn);
	
    //jika database kosong, tambah tabel
    sqlite3_exec(conn, "Drop table siswa", callback, 0, &err);
    isi_database(conn);
	
    //gunakan query
    printf("Banyaknya data : ");
    sqlite3_exec(conn, "SELECT count(nilai) AS hasil FROM siswa", callback, 0, &err);
	
    printf("\nSum : ");
    sqlite3_exec(conn, "SELECT Sum(nilai) AS hasil FROM siswa", callback, 0, &err);
	
    printf("\nRata-rata : ");
    sqlite3_exec(conn, "SELECT Avg(nilai) AS hasil FROM siswa", callback, 0, &err);
	
    sqlite3_close(conn);
    return 0;
}
Output :
Banyaknya data : 3

Sum : 250

Rata-rata : 83.3333333333333

Berbeda dengan callback yang biasa saya contohkan sebelum ini, callback yang digunakan dalam kode program di atas tidak menampilkan nama tabel karena datanya hanya satu. Karena kolom yang ditampilkan aggregate function hanya ada satu, loop juga tidak diperlukan.