sql >> Base de Datos >  >> RDS >> Mysql

MySQL Agrupar por y omitir la agrupación en valores nulos

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