2016-08-10 3 views
1

При попытке получить количество идентификаторов я получаю другой ответ, когда группируюсь по дням, а когда нет.Различные выходные данные при использовании счетчика и группы по

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

Если вы группируете данные по дням, 'count' не должен превышать общий' count', а скорее подмножество на основе дня. Возможно, у вас есть 170 дней и думаете, что это граф? Примерные данные и ожидаемые результаты были бы полезны ... – sgeddes

+0

Я думаю, что те же 'cv.CLICK_ID' получили разные дни, поэтому сумма CLICK_ID за каждый день больше, чем счетчик CLICK_ID в таблице. – valex

ответ

1

Ваши счетчики зависят от правильного запроса, может быть, у вас есть повторяющаяся строка?

пример

table1 
id name value 
1 2 3 

table2

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 

Я думаю, что, у вас есть проблемы по этой причине.