Я работаю со следующим запросом TEST SQL, чтобы подсчитать количество клиентов на основе logi c +, которые получили конкретное c электронное письмо (убедитесь, что клиент существует в таблице отправленных писем)
select
count(distinct tab1.order_key) as VALUE
from
cust_order_type tab1
inner join
cust_membership tab2 on tab1.transaction_id = tab2.transaction_id
inner join
cust_transactions tab3 on tab1.transaction_id = tab3.transaction_id
and tab3.coupon_id not in (123, 456)
---CHECK IF THEY RECEIVED THE EMAIL
and tab3.customer_key IN (select customer_key from cust_table tab4
where tab4.email in (select email from Email_Sent_Date_List tab5 where tab5.EmailA_Date IS NOT NULL AND tab5.EmailA_Date >= '2020-07-06'))
inner join
cust_product_variation tab6 on tab3.product_variation_id = tab6.product_variation_id
where
tab6.country in ('USA', 'CANADA')
and tab1.trans_date = '2020-07-06'
Этот запрос возвращает результат 600.
Вышеупомянутый запрос работал, но я заметил, что включенный запрос logi c проверяет, получил ли клиент электронное письмо или не существует во внутреннем соединении. Говоря об этом:
---CHECK IF THEY RECEIVED THE EMAIL
and tab3.customer_key IN (select customer_key from cust_table tab4 where tab4.email in (select email from Email_Sent_Date_List tab5 where tab5.EmailA_Date IS NOT NULL AND tab5.EmailA_Date >= '2020-07-06'))
Теперь я пытаюсь понять и задаться вопросом, является ли это правильным местом для этих критериев?
Потому что, если я вынесу эти критерии из внутреннего присоединиться и добавить в конце следующим образом:
select count(distinct tab1.order_key) as VALUE
from cust_order_type tab1
inner join cust_membership tab2
on tab1.transaction_id = tab2.transaction_id
inner join cust_transactions tab3
on tab1.transaction_id = tab3.transaction_id
and tab3.coupon_id not in (123, 456)
inner join cust_product_variation tab6
on tab3.product_variation_id = tab6.product_variation_id
where tab6.country IN ('USA','CANADA')
and tab1.trans_date '2020-07-06'
---CHECK IF THEY RECEIVED THE EMAIL
and tab3.customer_key IN (select customer_key from cust_table tab4 where tab4.email in (select email from Email_Sent_Date_List tab5 where tab5.EmailA_Date IS NOT NULL AND tab5.EmailA_Date >= '2020-07-06'))
Теперь этот запрос возвращает результат 18000.
Число выходных данных другое, почему? Может ли кто-нибудь помочь мне понять это и предложить правильное расположение для этого критерия?
UPDATE : чтобы проверить, какие таблицы должны быть или не должны использоваться во внутреннем соединении. Я попытался выполнить тест.
Где я удалил критерии EMAIL SENT и выполнил следующий запрос:
select count(distinct tab1.order_key) as VALUE
from cust_order_type tab1
inner join cust_membership tab2
on tab1.transaction_id = tab2.transaction_id
inner join cust_transactions tab3
on tab1.transaction_id = tab3.transaction_id
and tab3.coupon_id not in (123, 456)
inner join cust_product_variation tab6
on tab3.product_variation_id = tab6.product_variation_id
where tab6.country IN ('USA','CANADA')
and tab1.trans_date '2020-07-06'
Вывод: 120000
Теперь добавлено внутреннее соединение с cust таблица (все еще без критериев EMAIL SENT)
select count(distinct tab1.order_key) as VALUE
from cust_order_type tab1
inner join cust_membership tab2
on tab1.transaction_id = tab2.transaction_id
inner join cust_transactions tab3
on tab1.transaction_id = tab3.transaction_id
and tab3.coupon_id not in (123, 456)
inner join cust_product_variation tab6
on tab3.product_variation_id = tab6.product_variation_id
INNER JOIN cust_table tab4
ON tab3.customer_key = tab4.customer_key
where tab6.country IN ('USA','CANADA')
and tab1.trans_date '2020-07-06'
Тот же результат: 120000
Пожалуйста, дайте мне знать, помогает ли это понять, как правильно использовать таблицу cust в дополнение к критериям отправки электронной почты?