Si tenemos una columna única (o un conjunto de columnas) en la tabla, entonces podemos agregar otra expresión al GROUP BY
.
La expresión debe devolver un valor único para cada fila cuando collection_id
es nulo. De lo contrario, devuelve una constante.
Asumiendo que tenemos un id
único columna en la tabla, entonces podemos hacer algo como esto:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Esa segunda expresión en el GROUP BY
devuelve un valor constante 0
cuando collection_id
No es nulo. Pero devuelve un valor único para cada fila cuando collection_id es nulo.
Tenga en cuenta que id
aquí hay solo una referencia a una columna que se define como única dentro de la tabla. La CLAVE PRINCIPAL es un buen candidato. Si no tenemos un índice único en una sola columna, entonces podemos repetir este mismo tipo de expresión para cada columna en nuestra restricción única, o para cualquier conjunto de expresiones que se garantice que son únicas en cada fila.
... 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 una expresión que genera un valor único:
... GROUP BY IFNULL(collection_id,UUID())