Почему данные становятся меньше после того, как я использую `union` - PullRequest
0 голосов
/ 25 марта 2020

Я создал вид, подобный этому:

create or replace view test_view as
select
    SC.department,
    SC.ad_platform,
    SC.date,
    SC.code,
    SC.account_id,
    SC.account_name,
    SC.conversions,
    SC.impressions,
    SC.clicA,
    SC.cash_cost,
    SC.reward_cost,
    SC.service_fee,
    SC.open_account,
    CM.ua_user_name,
    CM.agent_name,
    CM.mediabuy_agent_name
from
    (   
        select 
            A.ad_platform, A.date, A.code, A.account_id, 
            max(A.account_name) as account_name, 
            max(A.department) as department, 
            max(A.open_account) as open_account,
            sum(A.conversions) as conversions, 
            sum(A.impressions) as impressions, 
            sum(A.clicA) as clicA,
            sum(A.cost) as cash_cost, 
            sum(A.service_fee) as service_fee,
            0 as reward_cost
        from table_a A
        where A.ad_platform not in ('A', 'B')
        group by A.ad_platform, A.date, A.code, A.account_id
    ) as SC right join table_b CM on CM.account_id = SC.account_id
union
select 
    S.department,
    S.ad_platform,
    S.date,
    S.code,
    S.account_id,
    S.account_name,
    S.conversions,
    S.impressions,
    S.clicA,
    OD.cash_cost,
    S.service_fee,
    OD.reward_cost,
    S.open_account,
    C.ua_user_name,
    C.agent_name,
    C.mediabuy_agent_name
from
    (   
        select 
            A.ad_platform, A.date, A.code, A.account_id, 
            max(A.account_name) as account_name, 
            max(A.department) as department, 
            max(A.open_account) as open_account,
            sum(A.conversions) as conversions, 
            sum(A.impressions) as impressions, 
            sum(A.clicA) as clicA,
            sum(A.service_fee) as service_fee
        from table_a A
        where A.ad_platform in ('A', 'B')
        group by A.ad_platform, A.date, A.code, A.account_id
    ) as S
    RIGHT JOIN 
        table_b C 
        on C.account_id = S.account_id
    RIGHT JOIN 
        table_c OD 
        on OD.date = S.date and OD.account_id = S.account_id and OD.platform = S.ad_platform and OD.code = S.code;

Проводная вещь, sql после union имеет результаты, которые reward_cost больше 0, но после I union эти два , результаты, которые reward_cost больше 0, пропали. Это очень запутанно, потому что нет дублированных записей, и я попытался union all, но все равно получил те же результаты. Кто-нибудь может взглянуть на это sql? Я новичок в этом. Спасибо.

...