Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Agrupar por e ignorar o agrupamento em valores nulos


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())