2011-05-06 3 views
0

다음 표 (표 1)와 같은 표가 있습니다. 이 테이블에는 3 개월 동안 Opens and Clicks를 나타내는 38mm 레코드가 있습니다. 별도의 보고서에 따르면 1 월에는 11mm가 열렸으며 그 중 7mm는 독창적 인 것으로 나타났습니다. 나는이 테이블에 7mm의 독특한 오픈이 있는지 확인하고 싶습니다. 구독자가 전자 메일을 열면 OpenFlag에는 1이, 그렇지 않으면 0이 있습니다. 가입자 당 고유 한 MessageID가있는 메시지가 여러 개인 경우 1 (감산) 만 계산하고 싶습니다.3 열짜리 튜플 내에서 중복 계산하기

아무도 나에게 수를 계산할 수있는 비교적 단순한 쿼리 (백작, 합계, 별개 등 사용)의 방향을 알려줄 수 있습니까? 나는 @vars를 사용하여 동일한 subscriberID/month 집합 내에서 첫 번째 subscriberID/month를 구별 할 수 있지만 다른 messageID를 사용하고 카운트를 계속 유지할 수 있음을 알고 있지만이 경우에는 그 복잡성을 피하고 싶습니다.

전시회 1 :

당신은 단지 구독 데이터베이스에서 이메일을 열었다 있는지 테스트하는 경우
create table TrackerSub 
( Id int(11) NOT NULL AUTO_INCREMENT, 
    Time datetime NOT NULL, 
    SubscriberId int(11) DEFAULT NULL, 
    MessageId int(11) Default NULL, 
    OpenFlag int(1) default null, 
    ClickFlag int(1) default null, 
    Month int(2) default null, 
    PRIMARY KEY (`Id`) 
); 

답변

0

:

SELECT SUM(SubOpens) FROM (
    SELECT 1 SubOpens FROM TrackerSub 
    WHERE OpenFlag = 1 
    GROUP BY SubscriberID 
) opens 

당신이 보는 것을 시도하는 경우에 얼마나 많은 독특한 구독자가 각 메시지를 열었습니다 ...

SELECT MessageId, SUM(SubOpens) FROM (
    SELECT MessageId, 1 SubOpens FROM TrackerSub 
    WHERE OpenFlag = 1 
    GROUP BY MessageId, SubscriberId 
) opens 
GROUP BY MessageId 

나는 그것이 정확하게 당신의 스키마를 표현한다고 생각합니다. 그것을 이해했다) - 돕는다! 행운을 빕니다!

+0

Jim에게 감사드립니다. 이 쿼리는 각각의 고유 한 메시지 ID에 대해 1을 계산합니다. 구독자 ID로 1을 모두 합산하는 방법을 알고 있습니까? 외부 하위 쿼리 구문에 약간의 문제가 있습니다. –

+0

각 MessageID는 단일 SubscriberID 와만 관련이 있습니까? 그렇다면 각 가입자가 몇 개의 고유 MessageID를 열어 놓았는지 테스트하고 있습니까? (추신에 대한 유감스럽게도, 제 대답에 대해 언급 한 것을 보지 못했습니다) –