
Fungsi Aggregat yang biasanya digunakan dalam pernyataan GROUP BY, yaitu:
SUM | digunakan untuk menghitung total nilai dari kolom tertentu |
COUNT | digunakan untuk menghitung jumlah record. |
AVG | digunakan untuk menampikan nilai rata-rata dari suatu kolom |
MAX | digunakan untuk menampikan nilai tertinggi dari suatu kolom |
MIN | digunakan untuk menampikan nilai terendah dari suatu kolom |
Sintaks Penyataan GROUP BY
SELECT nama_kolom, fungs_agregat(nama_kolom)
FROM nama_tabel
WHERE syarat
GROUP BY nama_kolom;
Contoh Pernyataan GROUP BY
Penyiapan Data untuk latihan Pernyataan GROUP BY
Sebelum latihan pernyataan GROUP BY siapkan terlebih dahulu tabel yang akan digunakan
- Buat tabel buku
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| mysql> CREATE TABLE buku ( -> kode_buku CHAR (5) PRIMARY KEY , -> judul_buku VARCHAR (50), -> pengarang VARCHAR (30), -> penerbit VARCHAR (30), -> tahun YEAR , -> kategori VARCHAR (30), -> harga INT (7), -> tgl_inventaris DATE -> ); Query OK, 0 rows affected (0.15 sec) mysql> DESC buku; + ----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | + ----------------+-------------+------+-----+---------+-------+ | kode_buku | char (5) | NO | PRI | NULL | | | judul_buku | varchar (50) | YES | | NULL | | | pengarang | varchar (30) | YES | | NULL | | | penerbit | varchar (30) | YES | | NULL | | | tahun | year (4) | YES | | NULL | | | kategori | varchar (30) | YES | | NULL | | | harga | int (7) | YES | | NULL | | | tgl_inventaris | date | YES | | NULL | | + ----------------+-------------+------+-----+---------+-------+ 8 rows in set (0.01 sec) |
- Isi data sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| mysql> INSERT INTO buku VALUES -> ( 'B0001' , 'Harry Potter' , 'JK Rowling' , 'British Press' , 2013, 'Fiksi' , 50000, '201-03-01' ), -> ( 'B0002' , 'Sistem Basis Data' , 'Abdul Kadir' , 'Andi Offset' , 2013, 'Buku Teks' , 40000, '2015-03-01' ), -> ( 'B0003' , 'Sistem Basis Data' , 'Fathansyah' , 'ITB Press' , 2013, 'Buku Teks' , 30000, '2015-03-01' ), -> ( 'B0004' , 'Prophet Muhammad' , 'Amir Abdullah' , 'Madina Press' , 2014, 'Biografi' , 45000, '2015-03-01' ), -> ( 'B0005' , 'Ketika Cinta Bertasbih' , 'Habiburahaman ES' , 'Madina Press' , 2014, 'Fiksi' , 75000, '2015-02-01' ), -> ( 'B0006' , 'Pemrograman Basis Data' , 'Abdul Kadir' , 'Andi Offset' , 2015, 'Buku Teks' , 67000, '2015-02-01' ); Query OK, 6 rows affected (0.05 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM buku; + -----------+------------------------+------------------+---------------+-------+-----------+------+----------------+ | kode_buku | judul_buku | pengarang | penerbit | tahun | kategori | harga| tgl_inventaris | + -----------+------------------------+------------------+---------------+-------+-----------+------+----------------+ | B0001 | Harry Potter | JK Rowling | British Press | 2013 | Fiksi | 50000| 2015-03-01 | | B0002 | Sistem Basis Data | Abdul Kadir | Andi Offset | 2013 | Buku Teks | 40000| 2015-03-01 | | B0003 | Sistem Basis Data | Fathansyah | ITB Press | 2013 | Buku Teks | 30000| 2015-03-01 | | B0004 | Prophet Muhammad | Amir Abdullah | Madina Press | 2014 | Biografi | 45000| 2015-03-01 | | B0005 | Ketika Cinta Bertasbih | Habiburahaman ES | Madina Press | 2014 | Fiksi | 75000| 2015-02-01 | | B0006 | Pemrograman Basis Data | Abdul Kadir | Andi Offset | 2015 | Buku Teks | 67000| 2015-02-01 | + -----------+------------------------+------------------+---------------+-------+-----------+------+----------------+ 6 rows in set (0.00 sec) |
Latihan Pernyataan GROUP BY
- Tampilkan banyaknya buku dari masing-masing pengarang dengan menggunakan pernyataan GROUP BY
1
2
3
4
5
6
7
8
9
10
11
12
13
| mysql> SELECT pengarang, COUNT (pengarang) -> FROM buku -> GROUP BY pengarang; + ------------------+------------------+ | pengarang | count (pengarang) | + ------------------+------------------+ | Abdul Kadir | 2 | | Amir Abdullah | 1 | | Fathansyah | 1 | | Habiburahaman ES | 1 | | JK Rowling | 1 | + ------------------+------------------+ 5 rows in set (0.05 sec) |
- Tampilkan banyaknya buku dari masing-masing pengarang gunakan kolom alias jumlah_buku dengan menggunakan pernyataan GROUP BY
1
2
3
4
5
6
7
8
9
10
11
12
13
| mysql> SELECT pengarang, COUNT (pengarang) AS jumlah_buku -> FROM buku -> GROUP BY pengarang; + ------------------+-------------+ | pengarang | jumlah_buku | + ------------------+-------------+ | Abdul Kadir | 2 | | Amir Abdullah | 1 | | Fathansyah | 1 | | Habiburahaman ES | 1 | | JK Rowling | 1 | + ------------------+-------------+ 5 rows in set (0.03 sec) |
- Dengan pernyataan GROUP BY, tampilkan jumlah harga buku yang dikelompokkan berdasarkan tgl_inventaris. Buat dengan alias total_harga dengan menggunakan pernyataan GROUP BY
1
2
3
4
5
6
7
8
9
10
| mysql> SELECT tgl_inventaris, SUM (harga) AS total_harga -> FROM buku -> GROUP BY tgl_inventaris; + ----------------+-------------+ | tgl_inventaris | total_harga | + ----------------+-------------+ | 2015-02-01 | 142000 | | 2015-03-01 | 165000 | + ----------------+-------------+ 2 rows in set (0.00 sec) |
- Tampilkan banyaknya buku (qty), jumlah harga buku (total_harga) yang dikelompokkan berdasarkan tgl_inventaris. Buat dengan alias total_harga dengan menggunakan pernyataan GROUP BY
1
2
3
4
5
6
7
8
9
10
| mysql> SELECT tgl_inventaris, COUNT (judul_buku) AS qty, SUM (harga) AS total_harga -> FROM buku -> GROUP BY tgl_inventaris; + ----------------+-----+-------------+ | tgl_inventaris | qty | total_harga | + ----------------+-----+-------------+ | 2015-02-01 | 2 | 142000 | | 2015-03-01 | 4 | 165000 | + ----------------+-----+-------------+ 2 rows in set (0.00 sec) |
- Tampilkan harga buku termahal, rata-rata dan termurah yang dikelompokkan berdasarkan kategori.
1
2
3
4
5
6
7
8
9
10
11
12
| mysql> SELECT kategori, MAX (harga) AS termahal, -> AVG (harga) AS rata_rata, MIN (harga) AS Termurah -> FROM buku -> GROUP BY kategori; + -----------+----------+------------+----------+ | kategori | termahal | rata_rata | Termurah | + -----------+----------+------------+----------+ | Biografi | 45000 | 45000.0000 | 45000 | | Buku Teks | 67000 | 45666.6667 | 30000 | | Fiksi | 75000 | 62500.0000 | 50000 | + -----------+----------+------------+----------+ 3 rows in set (0.00 sec) |
- Tampilkan jumlah record masing-masing kategori selain kategori=’Fiksi’.
1
2
3
4
5
6
7
8
9
10
11
| mysql> SELECT kategori, COUNT (*) -> FROM buku -> WHERE NOT (kategori= 'Fiksi' ) -> GROUP BY kategori; + -----------+----------+ | kategori | COUNT (*) | + -----------+----------+ | Biografi | 1 | | Buku Teks | 3 | + -----------+----------+ 2 rows in set (0.00 sec) |
Demikian pokok bahasan Pernyataan GROUP BY dalam MySQL. Semoga bermanfaat. Selamat belajar dan berbagi.
Sumber
- The GROUP BY Statement, http://www.w3schools.com/sql/sql_groupby.asp
- Fungsi Agregat dalam MySQL, http://fairuzelsaid.com/fungsi-agregat/