내 이메일 수신자에게 내 이메일 전달 시스템이 있습니다. 내 이메일의 보낸 메시지, 클릭 및 시작 횟수에 대한 통계 정보를 가져와야합니다. 모든 정보 저장소는 PostgreSQL 데이터베이스에 있습니다.고유 한 클릭 수 (SQL 쿼리)
_id name
===========
1 MySubscribers
2 VIP Subscribers
그래서이 각 가입자 목록을 위해 이메일을 저장하는 테이블 (emails
, 일대 다 관계)
_id subscriber_collection_id email_address
===========================================
1 1 [email protected]
2 1 [email protected]
3 1 [email protected]
4 2 [email protected]
5 2 [email protected]
6 2 [email protected]
:
내 가입자 목록 (subscriber_collections
)와 테이블이
나는 또한 mail_activities
다른 전자 메일 활동 (예 : 클릭 수, 보내기, 보내기 등)에 대한 정보를 저장합니다. :
_id message_id message_subject activity_date email_address type
============================================================================
1 25 Hello msg! 2017-11-21 [email protected] Sends
2 25 Hello msg! 2017-11-21 [email protected] Opens
3 25 Hello msg! 2017-11-21 [email protected] Clicks
4 25 Hello msg! 2017-11-21 [email protected] Clicks
5 25 Hello msg! 2017-11-21 [email protected] Clicks
6 16 Discount! 2017-11-21 [email protected] Opens
7 16 Discount! 2017-11-21 [email protected] Opens
8 16 Discount! 2017-11-21 [email protected] Opens
사용자는 동일한 전자 메일을 반복적으로 클릭 (또는 열 수) 있으며 정보는 데이터베이스에 있습니다.
SELECT
MA.message_id
,MA.message_subject
,SC.name as subscriber_collection_name
,MA.date AS activity_date
,SUM(CASE WHEN MA.type='Sends' THEN 1 ELSE 0 END) as sends_count
,SUM(CASE WHEN MA.type='Opens' THEN 1 ELSE 0 END) as opens_count
,SUM(CASE WHEN MA.type='Clicks' THEN 1 ELSE 0 END) as clicks_count
FROM
mail_activities MA
INNER JOIN emails E ON MA.email_address = E.email_address
INNER JOIN subscriber_collections SC ON E.subscriber_collection_id = SC._id
GROUP BY
MA.message_id
,MA.message_subject
,SC._id
,SC.name
,MA.date
ORDER BY
message_id
이 쿼리는 잘 작동 :
나는 각 이메일 메시지와 가입자 컬렉션에 대해 서로 다른 활동의 수를 가져 오는 SQL 쿼리를 보유하고 있습니다.
질문 : 나는 독특한 클릭 수를 얻을 필요가 각 email_address
을위한 활동을 열고 다음은이 데이터에 대한 결과입니다. 해당 쿼리에서 추가 열로 가져와야하는이 정보 (unique_clicks
및 unique_opens
). 예를 들어, 사용자 [email protected]
에 의해 Hello msg!
문자의 두 번의 클릭이 테이블 emails
에 인식되어야합니다. 이 정보를 다른 열에서 어떻게 얻을 수 있습니까? 감사합니다 ...
PS : 내 나쁜 영어에 대한 죄송합니다 ...