是否可以使用GROUP BY和記錄偏好?MySQL GROUP BY優先
比如我有聯繫的數據一大堆,可能會或可能不會包含所有的信息 - 在一個CSV意義,如果可能是這樣的:
Test User, Address1, Address2, [email protected]
, , , [email protected]
如果我是GROUP BY電子郵件,我會愛提取更相關的記錄。
希望有道理嗎?
此致, 克里斯
是否可以使用GROUP BY和記錄偏好?MySQL GROUP BY優先
比如我有聯繫的數據一大堆,可能會或可能不會包含所有的信息 - 在一個CSV意義,如果可能是這樣的:
Test User, Address1, Address2, [email protected]
, , , [email protected]
如果我是GROUP BY電子郵件,我會愛提取更相關的記錄。
希望有道理嗎?
此致, 克里斯
您可以使用聚合函數獲取每個電子郵件的「相關」記錄。
我覺得這個查詢會得到你最好的結果:
SELECT emailAddress, max(concat(fullName,',',address1,',',address2))
FROM table
GROUP BY emailAddress
它將返回最富有的每一行對應一個電子郵件地址,但所有數據都將一個字符串(以逗號分隔)內被退回,所以你將不得不解析它以某種方式。
如果性能是沒有問題,你想獲得一個正常的結果,在不同的領域設置,那麼你可以用一個走:
SELECT table.emailAddress, fullName, address1, address2
FROM
table JOIN
(SELECT emailAddress,
max(concat(fullName,address1,address2)) as bestRowInOneString
FROM table
GROUP BY emailAddress
) bestRowsSubQuery
ON
concat(table.fullname,table.address1,table.address2) = bestRowsSubQuery.bestRowInOneString
AND table.emailAddress = bestRowsSubQuery.emailAddress
GROUP BY SUBSTRING(字段,N);
不知道你的意思,但在一些(?大多數)SQL方言你可以CASE
邏輯結合GROUP BY
:
GROUP BY case when col1 = 'x' then col1 else col2 end
(就像我說的,我不知道這對MySQL是有效的)。
編輯:如果對MySQL的無效,你總是可以邏輯
GROUP BY case when col1 = 'x' then col1 else col2 end
的此位提取到一個視圖和SELECT
從該視圖,GROUP
荷蘭國際集團在包含邏輯例如列
select * from
(
select ....
, (case ....) as logic_col
from ...
) x
group by logic_col
對於每封電子郵件,該語句將選擇設置了最高場紀錄:
SELECT *
FROM (
SELECT DISTINCT email
FROM mytable
) mi
JOIN mytable mo
ON mo.id =
(
SELECT id
FROM mytable mf
WHERE mf.email = mi.email
ORDER BY
username IS NULL + address1 IS NULL + address2 IS NULL DESC
LIMIT 1
)
你是什麼意思「更相關的記錄」?另一行有相同的電子郵件?或另一列?要麼? – Andomar 2009-11-16 12:32:53
嗨,假設這兩行上面的數據庫在哪裏 - 我想拉出與聯繫信息,而不是與空字段的行。 – ChrisS 2009-11-16 12:44:32