Теперь я работаю с файлами SQL и задаю вопрос: я хотел бы рассмотреть влияние рекламной кампании на данные в файле sql. В файле SQL есть 2 таблицы, веб-трафик и рекламная кампания
Таблица веб-трафика, пусть скажем, веб-таблица выглядит следующим образом
visitor_id purchase date traffic_source campaign_name country purchase_value
1 1/1/2018 Search promotion101 US 100
2 2/1/2018 Direct voucher02 UK 110
3 2/1/2018 Search buyme01 US 50
4 3/1/2018 Banner Example01 DE 130
.. ....... ... ... .. ...
А во второй таблице у меня есть информация о кампании, скажем, продвижение по таблицам
Promotion_date campaign_name num_delivered promotion_fee
1/12/2017 promotion101 50 30
2/12/2017 promotion101 30 20
2/12/2017 voucher02 40 10
3/12/2017 Example01 70 30
... ... ... ...
В этом случае я попытался использовать левое соединение, чтобы сначала объединить таблицу, но запись дублировалась
Select
web.campaign_name,
sum(web.promotion_fee),
sum(promotion.purchase_value)
FROM
web LEFT JOIN promotion
ON web.campaign_name = promotion.campaign_name
GROUP BY
1
Однако это не работает, потому что левое соединение просто дублирует запись... В этом случае, если я хочу сформулировать таблицу следующим образом:
Campaign_name Traffic_source Total_Customer Total_purchase_value Total expenditure
promotion101 Search 1000 2000 1500
Example01 Banner 2000 3750 3000
Можно ли это сделать? Если да, то как я могу это сделать? Большое спасибо за вашу помощь заранее!
Вы можете отображать агрегаты каждой таблицы в отдельных подзапросах:
SELECT
w.campaign_name,
w.purchase_value AS Total_purchase_value,
COALESCE(p.promotion_fee, 0) AS Total_expenditure
FROM
(
SELECT campaign_name, SUM(purchase_value) AS purchase_value
FROM web
GROUP BY campaign_name
) w
LEFT JOIN
(
SELECT campaign_name, SUM(promotion_fee) AS promotion_fee
FROM promotion
GROUP BY campaign_name
) p
ON w.campaign_name = p.campaign_name;
Критическое предположение, которое я сделал здесь, состоит в том, что web
таблица содержит данные для всех кампаний. Если нет, то вам, возможно, придется присоединиться к третьей таблице, содержащей все кампании, которые произошли. На самом деле, возможно, такая таблица уже должна существовать.
total_customer
,Total_purchase_value
Total expenditure
значенияTotal expenditure
?GROUP BY web.campaign_name
. (группировка по порядковому положению не является хорошей практикой программирования.)