2014-10-22 4 views
0

분명히 작은 부분으로 나누어 져야하는 SELECT 문에서 CASE 문을 사용하고 있지만이 작업을 완료하는 데있어 하나의 필드이며 반환하지 않는 지점을 통과했습니다.다른 레코드의 데이터가 필요한 경우 사용

여기에 전체 쿼리를 포기하지 않고, 문제의 요점은 이것이다 :

SELECT 
    Dogs, 
    Cats, 
    COUNT(DISTINCT CASE WHEN my.my_id = 2765 THEN my.data END) AS CountAccounts, 
    COUNT(DISTINCT CASE WHEN my.my_id = 3347 THEN my.data END) AS CountUpgradedAccounts 

my가 이름 값 쌍의 조회 테이블 인 테이블을 참조. my.my_id = 3347은 "업그레이드 된"계정을 의미하며 데이터 포인트는 계정이 업그레이드 된 날짜입니다. 계정 생성을 나타내는 my.my_id = 2765이고 해당 데이터 포인트가 accountID입니다.

my 그것은 다음과 같습니다 MY_ID = 2765

UserID | my_id | Data 
374 | 2765 | 8826 
487 | 3347 | 2013-09-01 
662 | 2765 | 8826 
321 | 2765 | 9213 
722 | 3347 | 2014-10-14 
852 | 2765 | 8826 
487 | 2765 | 9213 

, 나는이 관련 있다는 accountIDs의 별개의 수를 싶습니다. 위 테이블에서 2 : Accounts 8826 and 9213입니다.

my에서 데이터를 가져 오면이 작업이 매우 간단하다는 것을 알고 있습니다. 그러나 my은 사안을 복잡하게 만드는 방식으로 작성되었습니다.

사실, 여기에 쿼리가 있습니다. 아마도 문제를 쉽게 볼 수 있습니다. SELECT 문에서 선택된 마지막 필드가 문제임을 유의하십시오. 나는 돈, t는 별개의 날짜를 계산하려면, 내가 업그레이드 한 : 내가 부탁 해요 것은 명확하지 않은 경우 나 단어에 도전 미안이 질문을하려고 발견 한

SELECT 
    sub.name AS ARName, 
    sub.desc AS ARDescription, 
    m.name AS MessageName, 
    m.subj AS MessageDescription, 
    clk.type AS EventType, 
    COUNT(DISTINCT clk.eid) AS CountAdmins, 
    COUNT(DISTINCT CASE WHEN my.my_id = 3347 THEN clk.eid END) AS CountUpgradeAdmins, 
    COUNT(DISTINCT CASE WHEN my.my_id = 2765 THEN my.data END) AS CountAccounts, 
    COUNT(DISTINCT CASE WHEN my.my_id = 3347 THEN my.data END) AS CountUpgradedAccounts # <-- THIS LINE IS THE PROBLEM 
FROM 
    bata.sseq seq 
INNER JOIN bata.messages m 
    ON m.id = seq.mid 
INNER JOIN bm_arc.clicks208 clk 
    ON clk.camp = seq.camp 
INNER JOIN bemails.cid cid 
    ON cid.id = clk.eid 
INNER JOIN bonfig.sub 
    ON sub.id = seq.sid 
LEFT JOIN bemails.my208 my 
    ON cid.id = my.eid AND (my_id = 3347 OR my_id = 2765) # only return people who upgraded and accountIDs 
WHERE 
    seq.cid = 208 
AND 
    sub.desc REGEXP '^Home pg free trail (A|B)' 
GROUP BY 
    ARName, 
    ARDescription, 
    MessageName, 
    MessageDescription, 
    EventType 

별개의 accountIDs를 계산합니다. 더 많은 정보가 있으면 알려주세요. 내에서 별개의 해당 데이터 포인트 의 수 사용자 ID 의 그 사용자 ID와 해당 인스턴스를 얻을

를 "3347의 각 인스턴스에 대해 : 내가 무엇을 말해을 요구하고있어 논의에 따라

. 데이터 WHERE my.my_id = 2765 "

+0

'UserId'에 중복 행이 있습니까? – Dan

+0

예 행이 중복됩니다. –

+0

고유 한 사용자입니까? 왜 당신은 UserID를 가지고 accountID를 언급합니까? 스키마에서 사용자를 나타내는 것은 무엇입니까? – Dan

답변

1

어쩌면 문제 라인을 변경하려고하는 선택 사용자 아이디가 아닌 데이터 :

SELECT 
    sub.name AS ARName, 
    sub.desc AS ARDescription, 
    m.name AS MessageName, 
    m.subj AS MessageDescription, 
    clk.type AS EventType, 
    COUNT(DISTINCT clk.eid) AS CountAdmins, 
    COUNT(DISTINCT CASE WHEN my.my_id = 3347 THEN clk.eid END) AS CountUpgradeAdmins, 
    COUNT(DISTINCT CASE WHEN my.my_id = 2765 THEN my.data END) AS CountAccounts, 
    COUNT(DISTINCT my2.data) AS CountUpgradedAccounts 
FROM 
    bata.sseq seq 
INNER JOIN bata.messages m 
    ON m.id = seq.mid 
INNER JOIN bm_arc.clicks208 clk 
    ON clk.camp = seq.camp 
INNER JOIN bemails.cid cid 
    ON cid.id = clk.eid 
INNER JOIN bonfig.sub 
    ON sub.id = seq.sid 
LEFT JOIN bemails.my208 my 
    ON cid.id = my.eid AND (my.my_id = 3347 OR my.my_id = 2765) # only return people who upgraded and  

LEFT JOIN bemails.my208 my2 
    ON my2.my_id = 2765 and my2.userID = my.userID and my.my_id=3347 #get the accounts that the user belongs to 
WHERE 
    seq.cid = 208 
    AND 
    sub.desc REGEXP '^Home pg free trail (A|B)' 
GROUP BY 
    ARName, 
    ARDescription, 
    MessageName, 
    MessageDescription, 
    EventType 
+0

댄, 답변 주셔서 감사하지만 작동하지 않습니다. 내 질문에 명확하게해야하지만 사용자와 계정은 서로 다른 두 가지가 있습니다. 하나의 계정에는 여러 명의 사용자가있을 수 있습니다. 따라서 고유 번호의 계정이 필요합니다. 나는 이해가 되니? –

+0

사용자가 여러 계정을 가질 수 있습니까? 어떻게 my.UserID에서 accountID로 갈 수 있습니까? 그러나 당신이 이것을하고, 당신이 카운트 걸릴 싶은 무엇입니까 – Dan

+0

올바른, 사용자가 여러 계정을 가질 수 있으며 계정이 여러 사용자가있을 수 있습니다. 기본적으로 많은 사람들 (사용자)이 동일한 인스턴스 (계정)에 액세스 할 수있는 소프트웨어 제품입니다. 그래, 내 생각에 DISTINCT가 어떤 점에서이 –

관련 문제