20
我有一个大表,其中的数据不是唯一的,而是需要的。该表是多重联合选择的结果,因此不是实际的表。由于其他原因,我无法将其作为实际表格。MySQL通过组获得第一个非空值
所有UNION表格都有一个电子邮件列,它最终将是唯一的。得到的记录是这样的:
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
正如你所看到的,一些电子邮件,其中包含不同的名称或不存在的名字出现更多然后一次。当我在最后加一个GROUP BY email
条款,结果是这样的:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected]
13 [email protected] Tony
正如你可以看到,电子邮件4没有一个名字,因为它选择了与NULL
第一条目的名称。然后我试图使用GROUP_CONCAT
这使得结果是这样的:
1 [email protected] Ozzy
14 [email protected] Ozzy,Tony
15 [email protected] Dave,Steve
16 [email protected] Tim
13 [email protected] Tony
正如你所看到的,现在每个人都有一个名字,但一些行有一个以上的名字串连。我想要做的是GROUP BY email
,并选择每行的第一项NOT NULL
每列的,从理论上看,像这样:
1 [email protected] Ozzy
2 [email protected] Tony
3 [email protected] Steve
4 [email protected] Tim
13 [email protected] Tony
我一直在使用COALESCE
尝试,但它不工作按预期。我目前的查询看起来像这样:
SELECT
id,
email,
`name`
FROM
(
SELECT
email,
`name`
FROM
multiple_tables_and_unions
) AS emails
GROUP BY email
我已删除临时表的代码,因为它包含了许多表,但所有选择email
和name
列。基本上我需要一个像GROUP_COALESCE
这样的函数,但不幸的是它不存在。我有什么选择?
感谢
有时候,最简单的回答是最好的:)我一直认为MAX的工作只在数字。谢谢 – Ozzy
哈哈真的吗?很棒! – daVe
聪明的一个!喜欢它 –