español - mysql group_concat order
MySQL obtiene el primer valor no nulo después del grupo por (1)
Intenta usar MAX
, así:
SELECT
email,
MAX(`name`)
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email
Tengo una tabla grande con datos que no son únicos, pero deben serlo. Esta tabla es el resultado de múltiples selecciones de unión, por lo que no es una tabla real. No puedo hacer una tabla real por otras razones.
Todas las tablas de UNION tienen una columna de correo electrónico que eventualmente será única. Los registros resultantes se ven así:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
14 [email protected] Ozzy
15 [email protected] Dave
16 [email protected] Tim
Como puede ver, algunos correos electrónicos aparecen más de una vez con nombres diferentes o nombres no existentes. Cuando agrego una cláusula de GROUP BY email
al final, los resultados se ven así:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
Como puede ver, el correo electrónico 4 no tiene nombre porque eligió la primera entrada con NULL
para un nombre. Luego intenté usar GROUP_CONCAT
que hizo que los resultados se vieran así:
1 [email protected] Ozzy
14 [email protected] Ozzy,Tony
15 [email protected] Dave,Steve
16 [email protected] Tim
13 [email protected] Tony
Como puede ver, ahora todos tienen un nombre, pero algunas filas tienen más de un nombre concatinado. Lo que quiero hacer es GROUP BY email
y elegir la primera entrada NOT NULL
de cada columna para que cada fila parezca teóricamente:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected] Tim
13 [email protected] Tony
He intentado usar COALESCE
pero no funciona como estaba previsto. Mi consulta actual se ve así:
SELECT
id,
email,
`name`
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email
He eliminado el código de la tabla temporal ya que contiene muchas tablas, pero todas seleccionan la columna de name
y email
. Esencialmente necesito una función como GROUP_COALESCE
pero desafortunadamente no existe. ¿Cuáles son mis opciones?
Gracias