J'ai un grand tableau avec des données qui ne sont pas uniques mais qui doivent l'être. Cette table est le résultat de plusieurs sélections d'union et n'est donc pas une table réelle. Je ne peux pas en faire un tableau réel pour d'autres raisons.
Toutes les tables UNION ont une colonne email qui sera finalement unique. Les enregistrements résultants ressemblent à ceci:
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
Comme vous pouvez le voir, certains e-mails apparaissent plusieurs fois avec des noms différents ou des noms inexistants. Lorsque j'ajoute un GROUP BY email
clause à la fin, les résultats ressemblent à ceci:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
Comme vous pouvez le voir, l'email 4 n'a pas de nom car il a choisi la première entrée avec NULL
pour un nom. Ensuite, j'ai essayé d'utiliser GROUP_CONCAT
qui donnait aux résultats l'aspect suivant:
1 [email protected] Ozzy
14 [email protected] Ozzy,Tony
15 [email protected] Dave,Steve
16 [email protected] Tim
13 [email protected] Tony
Comme vous pouvez le voir, maintenant tout le monde a un nom mais certaines lignes ont plus d'un nom concaténé. Ce que je veux faire, c'est GROUP BY email
et choisissez le premier NOT NULL
entrée de chaque colonne pour que chaque ligne ressemble théoriquement à ceci:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected] Tim
13 [email protected] Tony
J'ai essayé d'utiliser COALESCE
mais cela ne fonctionne pas comme prévu. Ma requête actuelle ressemble à ceci:
SELECT
id,
email,
`name`
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email
J'ai supprimé le code de la table temporaire car il contient de nombreuses tables mais toutes sélectionnent les colonnes email
et name
. Essentiellement, j'ai besoin d'une fonction comme GROUP_COALESCE
mais malheureusement ça n'existe pas. Quelles sont mes options?
Merci
Essayez d'utiliser MAX
, comme ceci:
SELECT
email,
MAX(`name`)
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email