Query Group By di PostgreSQL

Untuk penggunaan query Group By di PostgreSQL berbeda dengan MySQL, agar lebih di mengerti coba dilihat contoh berikut :

MySQL 
mysql> create table pengunjung (id_pengunjung int not null, nama_pengunjung varchar(30) not null, tanggal date not null);Query OK, 0 rows affected (0.15 sec)
mysql> desc pengunjung;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| id_pengunjung   | int(11)     | NO   |     | NULL    |       |
| nama_pengunjung | varchar(30) | NO   |     | NULL    |       |
| tanggal         | date        | NO   |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> insert into pengunjung values     -> (1,'abby','2013-01-01'),    -> (2,'yoga','2013-01-01'),    -> (3,'dono','2013-01-02'),    -> (2,'yoga','2013-01-04'),    -> (1,'abby','2013-01-13'),    -> (1,'abby','2013-01-23');Query OK, 6 rows affected (0.19 sec)Records: 6  Duplicates: 0  Warnings: 0
mysql> select * from pengunjung;
+---------------+-----------------+------------+
| id_pengunjung | nama_pengunjung | tanggal    |
+---------------+-----------------+------------+
|             1 | abby            | 2013-01-01 |
|             2 | yoga            | 2013-01-01 |
|             3 | dono            | 2013-01-02 |
|             2 | yoga            | 2013-01-04 |
|             1 | abby            | 2013-01-13 |
|             1 | abby            | 2013-01-23 |
+---------------+-----------------+------------+
6 rows in set (0.00 sec)

contoh query Group By dengan MySQL seperti berikut :
mysql> select * from pengunjung group by id_pengunjung;
+---------------+-----------------+------------+
| id_pengunjung | nama_pengunjung | tanggal    |
+---------------+-----------------+------------+
|             1 | abby            | 2013-01-01 |
|             2 | yoga            | 2013-01-01 |
|             3 | dono            | 2013-01-02 |
+---------------+-----------------+------------+
3 rows in set (0.00 sec)

Sekarang coba kita coba tabel data yang sama dengan PostgreSQL :
postgres=# SELECT * from pengunjung;
+---------------+-----------------+------------+
| id_pengunjung | nama_pengunjung |  tanggal   |
+---------------+-----------------+------------+
|             1 | abby            | 2013-01-01 |
|             2 | yoga            | 2013-01-01 |
|             3 | dono            | 2013-01-02 |
|             2 | yoga            | 2013-01-04 |
|             1 | abby            | 2013-01-13 |
|             1 | abby            | 2013-01-23 |
+---------------+-----------------+------------+
(6 rows)

Dan kita coba jalankan query Group By yang sama :
postgres=# select * from pengunjung group by id_pengunjung;
ERROR:  column "pengunjung.nama_pengunjung" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select * from pengunjung group by id_pengunjung;

Solusinya adalah dengan menggunakan fungsi DISTINCT ON  seperti berikut :
postgres=# select distinct on (id_pengunjung) id_pengunjung, nama_pengunjung, tanggal from pengunjung;
+---------------+-----------------+------------+
| id_pengunjung | nama_pengunjung |  tanggal   |
+---------------+-----------------+------------+
|             1 | abby            | 2013-01-01 |
|             2 | yoga            | 2013-01-01 |
|             3 | dono            | 2013-01-02 |
+---------------+-----------------+------------+
(3 rows)

Jadi DISTINCT akan mengabaikan nilai yang sama dalam suatu kolom.

Query Group By di PostgreSQL

Query Group By di PostgreSQL


Semoga Membantu 






EmoticonEmoticon