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
聰明的一個!喜歡它 –