2013-05-08 40 views
0

嗨我無法正確計算此問題。我正在嘗試計算重複的電子郵件,這些電子郵件的名字和/或姓氏各不相同。 (即 123 @ .com sam 123 @ .com ben 我需要一個重複的電子郵件計數) 我正在處理2個表格。該EMAIL_ADDRESS是在mrtcustomer.customer_email表和姓和名是在mrtcustomer.customer_master表查找具有不同姓氏和/或姓氏的重複電子郵件的數量

我的代碼

SELECT COUNT(*) 
FROM 
(SELECT e.customer_master_id, email_address, customer_first_name, customer_last_name, 
ROW_NUMBER() OVER (PARTITION BY EMAIL_ADDRESS ORDER BY CUSTOMER_FIRST_NAME) RN 
FROM mrtcustomer.customer_email e 
JOIN mrtcustomer.customer_master t ON e.customer_master_id = t.customer_master_id 
WHERE t.customer_first_name IS NOT NULL 
AND t.customer_last_name IS NOT NULL 
AND customer_FIRST_NAME != 'Unknown' 
AND customer_LAST_NAME != 'Unknown' 
GROUP BY e.customer_master_id, email_address, customer_first_name, customer_last_name 
ORDER BY 1 DESC) 
WHERE RN > 1 

我猜它我的WHERE子句是錯誤的。

+0

將NULL和另一個值計爲重複? – 2013-05-08 20:17:46

+0

試着簡化問題。你的'WHERE t.customer_first_name ... AND ... AND ...'子句是你的業務邏輯,與所問的問題無關。是否需要加入以查看問題,或來自不同表格的電子郵件地址和客戶名稱? – 2013-05-08 20:27:26

+0

加入是必要的,因爲電子郵件位於mrtcustomer.customer_email表中,並且名和姓位於mrtcustomer.customer_master表中。我的where子句真的很混亂。我不知道如何寫出來,以便我可以計算重複的電子郵件,其名字和姓氏不同。 – iluv2smooch 2013-05-08 20:31:37

回答

1

我就開始是這樣的:(編輯,以反映編輯)

select email_address 
    , count(distinct customer_first_name) f 
    , count(distinct customer_last_name) l 
from customer_email e, customar_master m 
where e.customer_master_id = m.customer_master_id 
group by email_address 

那麼如果在該名稱列> 1你有問題 - 所以換行與此類似:

select email_address from 
(
select email_address 
    , count(distinct customer_first_name) f 
    , count(distinct customer_last_name) l 
from customer_email e, customar_master m 
where e.customer_master_id = m.customer_master_id 
group by email_address 
) 
where fn > 1 or ln > 1 
+0

我正在處理2個表格,電子郵件位於電子郵件表格中,名稱位於另一個表格中。它變得非常混亂。 – iluv2smooch 2013-05-08 20:21:51

+0

好的 - 相同的模式 - 只是加入表格。 – Randy 2013-05-08 20:22:54

0

識別不同FNAME,LNAME,電子郵件記錄...... 然後通過電子郵件(有一個以上的記錄)組... 然後做一個計數。

 

-- count 
SELECT COUNT(DISTINCT email_address) 
FROM 
(
    -- group by email , find where there is more than one distinct record for each email 
    SELECT email_address 
    FROM 
    (
     -- get distinct Fname, Lname, Email combinations in derived table 
     SELECT customer_first_name , customer_last_name, email_address 
     FROM mrtcustomer.customer_email 
     JOIN mrtcustomer.customer_master t ON e.customer_master_id = t.customer_master_id 
     WHERE t.customer_first_name IS NOT NULL 
     AND t.customer_last_name IS NOT NULL 
     AND customer_FIRST_NAME != 'Unknown' 
     AND customer_LAST_NAME != 'Unknown' 
     GROUP BY 1,2,3 
    ) foo 
    GROUP BY 1 
HAVING COUNT(*)>1 
) bar 
 
+0

謝謝大家 – iluv2smooch 2013-05-09 13:03:24