簡體   English   中英

mysql不同的group_concat值

[英]mysql distinct group_concat values

我有很多用戶帳戶,需要根據DOB郵政編碼等創建關聯。

我有以下查詢:

SELECT DISTINCT CONCAT_WS(' , ' ,a.user_id , GROUP_CONCAT( b.user_id SEPARATOR ' , ' ) )
FROM tbl_users_details a,
tbl_users_details b
WHERE a.user_id != b.user_id
AND a.date_of_birth = b.date_of_birth
AND a.postcode = b.postcode
AND LEVENSHTEIN_RATIO( a.last_name , b.last_name ) > 60
GROUP BY a.user_id

為了證明我的要求......

如果帳戶1 5 9和12符合條件(即這些人是同一個人)

我將得到4個結果,格式為

1  , 5 , 9 , 12
5  , 1 , 9 , 12
9  , 1 , 5 , 12
12 , 1 , 5 , 9

我真的很喜歡1,5,9,12

任何指針都很棒。

謝謝大家。

您能否更清楚自己的要求?

無論如何嘗試像這樣使用子查詢

Select CONCAT (user.i,',)
from 
(Select Distinct ...... --- ur old code ---- )

謝謝,Shanmugam

一般來說,我會做這樣的事情:

SELECT GROUP_CONCAT( user_id )
FROM tbl_users_details
GROUP BY date_of_birth, postcode, last_name

但是Levenshtein距離檢查使此問題變得棘手,因為實際上不能保證LEVENSHTEIN_RATIO(x, y) > nLEVENSHTEIN_RATIO(y, z) > n暗示LEVENSHTEIN_RATIO(x, z) > n (例如,如果您的一個用戶被命名為“Anderson”,另一個“Addison”和第三個“Atkinson”會怎么樣?)您可能想要考慮使用其他一些實際將名稱映射到不同組的其他相似性估計方法,例如soundex或者是metaphone

SELECT GROUP_CONCAT( user_id )
FROM tbl_users_details
GROUP BY date_of_birth, postcode, SOUNDEX(last_name)

您可以在GROUP_CONCAT函數中包含ORDER BY子句 -

... GROUP_CONCAT(b.user_id SEPARATOR ' , ' ORDER BY b.user_id)

估計我明白了...

SELECT  GROUP_CONCAT(ida ORDER BY ida ASC SEPARATOR ' , ') ids
FROM
(SELECT LEAST(a.user_id, b.user_id ) idbase,a.user_id ida, b.user_id idb
FROM apollo.tbl_users_details a,
apollo.tbl_users_details b
WHERE a.user_id != b.user_id
AND a.date_of_birth = b.date_of_birth
AND a.postcode = b.postcode
AND LEVENSHTEIN_RATIO( a.last_name , b.last_name ) > 60
GROUP BY a.user_id) as sub
GROUP BY idbase;

在完整數據集上運行以測試..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM