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;
}
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.