2016-08-10 15 views
1

IDのカウントを取得しようとすると、私は日でグループ化するときと私がそうでないときに別の答えが得られます。カウントとグループを使用すると異なる出力

select cv.CONV_DAY, count(distinct cv.CLICK_ID) 
from 
    clickcache.click cc 
right join(
     select distinct cv.CLICK_ID, cv.CONV_DAY, cv.PIXEL_ID 
     from clickcache.CONVERSION cv 
     where cv.CLICK_ID IS NOT NULL) cv ON cv.CLICK_ID = cc.ID 
where cc.ADV_ACCOUNT_ID = 25176 
    and cv.CONV_DAY between '2016-8-01' AND '2016-08-07' 
    and AMP_CLICK_STATUS_ID = 1 
    AND pixel_id IN 
        (SELECT DISTINCT conversion_pixel_id 
       FROM 
        ampx.campaign_event_funnel ef 
       JOIN ampx.campaign cp ON 
        cp.id = ef.campaign_id 
        AND cp.campaign_status_id = 1 
       WHERE 
        ef.account_id IN(25176) 
        AND include_optimization = 1) 
group by 1 
order by 1 asc 

これが正解と私が欲しいです170を生成します。これは、他の一方で、157を表示

select count(distinct cv.CLICK_ID) 
from 
    clickcache.click cc 
right join(
     select distinct cv.CLICK_ID, cv.CONV_DAY, cv.PIXEL_ID 
     from clickcache.CONVERSION cv 
     where cv.CLICK_ID IS NOT NULL) cv ON cv.CLICK_ID = cc.ID 
where cc.ADV_ACCOUNT_ID = 25176 
    and cv.CONV_DAY between '2016-8-01' AND '2016-08-07' 
    and AMP_CLICK_STATUS_ID = 1 
    AND pixel_id IN 
        (SELECT DISTINCT conversion_pixel_id 
       FROM 
        ampx.campaign_event_funnel ef 
       JOIN ampx.campaign cp ON 
        cp.id = ef.campaign_id 
        AND cp.campaign_status_id = 1 
       WHERE 
        ef.account_id IN(25176) 
        AND include_optimization = 1) 

私の質問私は、この矛盾を入手できますし、どのように適切なカウントを取得するためにそれを修正する理由は?

ありがとうございました!

+0

1日ごとにグループ化している場合、 'count'は全体の' count'よりも大きくなるべきではなく、その日に基づくサブセットです。おそらくあなたは170日持っていると思うそれはカウントですか?サンプルデータと期待される結果は役に立ちます... – sgeddes

+0

私は同じ 'cv.CLICK_ID'が別の日に入ったと思いますので、1日あたりのCLICK_IDの合計がテーブル内の別個のCLICK_IDの数よりも大きいです。 – valex

答えて

1

あなたの数は正しいクエリのもので、多分あなたは重複した行を持っていますか?

id name value 
1 4 5 
2 6 3 
1 6 3 

が右

select * from table1 a right join table2 b on a.value = b.value 

1 2 3 2 6 3 
1 2 3 1 6 3 

    select count(distinct a.value) 
from (select a.id, a.name, a.value, b.id, b.name, b.value 
from table1 a right join table2 b on a.value = b.value) 

result is 1 

    select b.id, count(distinct a.value) 
from (select a.id, a.name, a.value, b.id, b.name, b.value 
from table1 a right join table2 b on a.value = b.value group) 
    group by b.id 

result is two rows 
2 1 
1 1 

私の推測では、あなたがこのような理由のために問題を抱えている、ということである結果を得る値にテーブルを結合

table1 
id name value 
1 2 3 

表2。

関連する問題