Se tivermos uma coluna exclusiva (ou conjunto de colunas) na tabela, podemos adicionar outra expressão ao
GROUP BY
. A expressão precisa retornar um valor exclusivo para cada linha quando
collection_id
é nulo. Caso contrário, retorna uma constante. Supondo que tenhamos um
id
exclusivo coluna na tabela, então podemos fazer algo assim:... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Essa segunda expressão no
GROUP BY
retorna um valor constante 0
quando collection_id
não é nulo. Mas ele retorna um valor exclusivo para cada linha quando collection_id é nulo. Observe que
id
aqui é apenas uma referência a uma coluna definida como exclusiva na tabela. A CHAVE PRIMÁRIA é uma boa candidata. Se não tivermos um índice exclusivo em uma única coluna, podemos repetir esse mesmo tipo de expressão para cada coluna em nossa restrição exclusiva ou para qualquer conjunto de expressões que seja garantidamente exclusiva em cada linha. ... 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)
Alternativamente, podemos usar uma expressão que gera um valor único:
... GROUP BY IFNULL(collection_id,UUID())