Ако имаме уникална колона (или набор от колони) в таблицата, тогава можем да добавим друг израз към GROUP BY .
Изразът трябва да върне уникална стойност за всеки ред, когато collection_id е нула. В противен случай връща константа.
Ако приемем, че имаме уникален id колона в таблицата, тогава можем да направим нещо подобно:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Този втори израз в GROUP BY връща константна стойност 0 когато collection_id не е нула. Но връща уникална стойност за всеки ред, когато collection_id е нулев.
Обърнете внимание, че id тук е само препратка към колона, която е дефинирана като уникална в таблицата. ПЪРВИЧНИЯТ КЛЮЧ е добър кандидат. Ако нямаме уникален индекс за една колона, тогава можем да повторим същия тип израз за всяка колона в нашето уникално ограничение или за всеки набор от изрази, който гарантирано е уникален за всеки ред.
... 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)
Като алтернатива можем да използваме израз, генериращ уникална стойност:
... GROUP BY IFNULL(collection_id,UUID())