Group By

Group by digunakan untuk mengelompokkan beberapa data berdasarkan kesamaan isi kolomnya. Group by biasa digunakan bersama dengan Aggregate functions, misalnya untuk mencari rata-rata atau jumlah dari data yang punya kesamaan. Jika kalian hanya menggunakan select bersama dengan group by tanpa klausa lain, group by akan mengambil salah satu data dari setiap data yang punya kesamaan. Sintaksnya?

  • Statement_select Group By nama_kolom
  • Statement_select Group By nama_kolom1, nama_kolom2

Contoh Query :

  • SELECT kelas, Sum(nilai) AS total, Avg(nilai) AS mean FROM siswa Group By kelas

Jika ada dua kolom yang dibandingkan oleh group by, maka salah satu isi kolom bisa sama. Tapi "kombinasi isi kolom" yang berbeda dianggap sebagai kelompok data yang berbeda. Kalian juga bisa menggunakan 3 kolom atau lebih.

Contoh :

//install librarynya kalau belum ada
#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

static char nama_kolom[3][10]={"Kelas","Total", "Rata-rata"};

int callback(void *notused, int jkolom, char **dataku, char **kolom){
   for(int i=0;i<jkolom;i++){
       printf("%s : %s\n", nama_kolom[i], dataku[i]);
   }
   printf("\n");
   return 0;
}

void isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[4][3]={{"Deri", "3A", "75"}, {"Panji", "3A", "95"}, {"Romi", "3B", "80"}, {"Doni", "3B", "70"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, kelas Text, nilai INTEGER);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<4;i++){
        sprintf(query, "INSERT INTO siswa(id, nama, kelas, 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", 0, 0, &err);
    isi_database(conn);

    //gunakan query
    sqlite3_exec(conn, "SELECT kelas, Sum(nilai) AS total, Avg(nilai) AS mean FROM siswa Group By kelas", callback, 0, &err);
	
    sqlite3_close(conn);
    return 0;
}
Output :
Kelas : 3A
Total : 170
Rata-rata : 85.0

Kelas : 3B
Total : 150
Rata-rata : 75.0

Contoh di atas menampilkan total dan rata-tata nilai dari setiap siswa yang memiliki kelas yang sama. Walaupun datanya ada 4, tapi data yang ditampilkan hanya ada dua karena adanya group by.