Jika kita memiliki kolom unik (atau kumpulan kolom) dalam tabel, maka kita dapat menambahkan ekspresi lain ke GROUP BY
.
Ekspresi perlu mengembalikan nilai unik untuk setiap baris saat collection_id
adalah nol. Jika tidak, ia mengembalikan sebuah konstanta.
Dengan asumsi kita memiliki id
yang unik kolom di tabel, maka kita bisa melakukan sesuatu seperti ini:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Ekspresi kedua dalam GROUP BY
mengembalikan nilai konstan 0
ketika collection_id
tidak nol. Tapi itu mengembalikan nilai unik untuk setiap baris ketika collection_id adalah nol.
Perhatikan bahwa id
di sini hanyalah referensi ke kolom yang didefinisikan sebagai unik di dalam tabel. KUNCI UTAMA adalah kandidat yang baik. Jika kita tidak memiliki indeks unik pada satu kolom, maka kita dapat mengulangi jenis ekspresi yang sama untuk setiap kolom dalam batasan unik kita, atau untuk kumpulan ekspresi apa pun yang dijamin unik pada setiap baris.
... GROUP BY collection_id
, IF(collection_id IS NULL, col1, '')
, IF(collection_id IS NULL, col2, NULL)
, IF(collection_id IS NULL, col3, collection_id)
Atau, kita dapat menggunakan ekspresi yang menghasilkan nilai unik:
... GROUP BY IFNULL(collection_id,UUID())