Saltar al contenido

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

Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Si tenemos una única columna (o conjunto de columnas) en la tabla, entonces podemos agregar otra expresión a la GROUP BY.

La expresión debe devolver un valor único para cada fila cuando collection_id es null. De lo contrario, devuelve una constante.

Suponiendo que tenemos un único id 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 Cuándo collection_id no es null. Pero devuelve un valor único para cada fila cuando collection_id es null.

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

Prueba esto:

SELECT * FROM dc_deal 
GROUP BY collection_id, 
case WHEN collection_id IS NULL THEN ID ELSE 0 END

Reemplazar ID con otra columna en la tabla para agrupar.

Ver un ejemplo en Violín SQL.

Te mostramos las comentarios y valoraciones de los usuarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *