Борьба со сложным запросом SQLMySql

Форум по Mysql
Ответить
Anonymous
 Борьба со сложным запросом SQL

Сообщение Anonymous »

У меня есть следующие таблицы < /p>

Код: Выделить всё

Campaigns

Registration_Date DATE
Campaign_ID INT
Country STRING
Advertising_Channel STRING
Registrations INT

Users

Registration_Date DATE
Registration_ID INT
Campaign_ID INT
Country STRING
Day7_Deposit_Amount INT
Day30_Deposit_Amount INT
Day60_Deposit_Amount INT
Day90_Deposit_Amount INT
Day120_Deposit_Amount INT
Day150_Deposit_Amount INT
Day180_Deposit_Amount INT
В пользователях , каждый день#_deposit umment Поле является совокупной суммой. Кроме того, идентификатор кампании может быть 0, сигнализируя о том, что пользователь не был зарегистрирован через маркетинговую кампанию.
Я хотел бы написать запрос, чтобы получить следующее из приведенных выше таблиц.

Код: Выделить всё

Registration_Date
Registration_Country
TrafficType
Advertising_Channel
Advertising_Spend
Number_Registrations
Number_Day7_Depositors
Number_Day30_Depositors
Number_Day60_Depositors
Number_Day90_Depositors
Number_Day120_Depositors
Number_Day150_Depositors
Number_Day180_Depositors
Accum_Day7_Deposit_Amount
Accum_Day30_Deposit_Amount
Accum_Day60_Deposit_Amount
Accum_Day90_Deposit_Amount
Accum_Day120_Deposit_Amount
Accum_Day150_Deposit_Amount
Где каждое поле Num_day # _depositors - это кумулятивное количество, сколько пользователей внесло депозит в течение # дней. Поле регистрации сообщает нам, сколько игроков зарегистрировано в конкретной маркетинговой кампании в определенном дне в определенной стране (поскольку одна и та же кампания может работать в несколько дней в нескольких странах).
Вот мой запрос (с излишним количеством месторождений и поля суммы вкладчика, так как это не то, где моя проблема)

SELECT
users.registration_date Registration_Date,
CASE
WHEN users.country = "USA" THEN "USA"
ELSE "Rest of the World"
END Country,
CASE
WHEN users.campaign_id = 0 THEN "Organic"
ELSE "Paid"
END TrafficType,
CASE
WHEN users.campaign_id = 0 THEN "Organic"
ELSE campaigns.channel
END Advertising_Channel,
CASE
WHEN users.campaign_id = 0 THEN 0
ELSE campaigns.spend
END Advertising_Spend,
count(users.registration_id) Registrations,
SUM(IF(users.day7_deposit_amount > 0, 1,0)) Number_Day7_Depositors,
SUM(users.day7_deposit_amount) Accum_Day7_Deposit_Amount,
FROM
campaigns
RIGHT JOIN
users
ON
campaigns.campaign_id = users.campaign_id AND
campaigns.registration_date = users.registration_date AND
campaigns.country = users.country
GROUP BY
users.campaign_id,
users.registration_date,
country,
campaigns.channel,
campaigns.spend

< /code>
Вот проблема. Я получаю большую часть данных, но любые строки в кампаниях , которые имели 0 регистраций, не будут отображаться. Я не уверен, как исправить запрос.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -sql-query
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»