Query Group By di PostgreSQL
Untuk penggunaan query Group By di PostgreSQL berbeda dengan MySQL, agar lebih di mengerti coba dilihat contoh berikut :
MySQL
+-----------------+-------------+------+-----+---------+-------+
| 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)
| 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 :
| 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 :
| 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 :
LINE 1: select * from pengunjung group by id_pengunjung;
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.
Jadi DISTINCT akan mengabaikan nilai yang sama dalam suatu kolom.
Semoga Membantu
Tidak ada komentar:
Posting Komentar