Merangkai (Concatenation) String pada Query Agregasi di MySQL

Langsung pada contoh saja, misalkan Sahabat memiliki query dan hasil seperti berikut :

mysql> select t2.cnopolisi,t3.ckode_produk,t3.galon_isi from tbl_sales_h_pabrik t1,tbl_sales_pabrik_pengemudi t2,tbl_sales_d_pabrik t3 where t1.cnofaktur=t2.cnofaktur AND dtanggal='2012-01-02' AND t1.cnofaktur=t3.cnofaktur AND t2.cnopolisi='B 12345 NP';

+-----------+--------------+-----------+

| cnopolisi | ckode_produk | galon_isi |

+-----------+--------------+-----------+

| B 12345 NP | 1404001 | 600.00 |

| B 12345 NP | 1401001 | 0.00 |

| B 12345 NP | 1401001 | 600.00 |

+-----------+--------------+-----------+

Sahabat dapat dengan mudah mendapatkan total galon yg dikirim oleh mobil B 12345 NP. Tapi bagaimana dengan produk nya ? Bagaimana Anda "menjumlahkan" produk (data berupa 'string') ?

Alhamdulillah, Pengembang MySQL sudah memikirkan hal ini. Sahabat bisa menggunakan fungsi GROUP_CONCAT() mengetahui produk apa saja yg dikirim oleh mobil B 12345 NP.

mysql> select t2.cnopolisi,group_concat(t3.ckode_produk),sum(t3.galon_isi) from tbl_sales_h_pabrik t1,tbl_sales_pabrik_pengemudi t2,tbl_sales_d_pabrik t3 where t1.cnofaktur=t2.cnofaktur AND dtanggal='2012-01-02' AND t1.cnofaktur=t3.cnofaktur AND t2.cnopolisi='B 12345 NP';

+-----------+-------------------------------+-------------------+

| cnopolisi | group_concat(t3.ckode_produk) | sum(t3.galon_isi) |

+-----------+-------------------------------+-------------------+

| B 12345 NP | 1404001,1401001,1401001 | 1200.00 |

+-----------+-------------------------------+-------------------+

1 row in set (0.00 sec)

Terlihat diatas masih ada data kode produk yg duplikat. Untuk menghilangkan duplikasi data, dapat menggunakan DISTINCT(), Sahabat bisa membaca informasi detail tentang fungsi ini di alamat [1].

Referensi