Объединить 2 столбца в один столбец после объединения - PullRequest
0 голосов
/ 03 января 2019

Я не уверен, имеет ли это смысл делать.Я родом из программиста, и для меня это должно иметь смысл.У меня есть базовый опыт работы с SQL, поэтому я знаю основы, что я делаю, но моделирование данных для аналитики в основном новое и чуждое мне.

У меня есть следующие таблицы:

 - Campaign: id, name, etc.
 - Daily_Spending: id, campaign_id, date, spending
 - Daily_Revenue: id, campaign_id, date, revenue

IТеперь нужно присоединиться к этим таблицам many_to_one в campaign_id, чтобы эффективно создать таблицу производных результатов, которая выглядит следующим образом:

Daily_Campaign_Data: campaign_id, date, spending, revenue

Где расходы и доходы равны NULL или 0, если их не было на определенную дату.

Прежде всего: имеет ли смысл делать это просто для того, чтобы получить аккуратную таблицу, в которой в основном содержатся все даты, когда были произведены расходы и / или доходы.

Второе: что будетспособ пойти об этом?Поскольку мне кажется, что я ничего не нахожу в объединении этих полей даты в одно, если они сосуществуют, как описано.

И в-третьих: Существуют ли альтернативы, которые имеют больше смысла в мире баз данных?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вам нужен список доступных дат.Затем используйте cross join, чтобы получить комбинации кампаний и дат, и, наконец, left join s, чтобы ввести нужные данные.

Предполагая, что кампании / даты не дублируются в таблицах расходов и доходов:

select d.date, c.*,
       ds.spending, dr.revenue
from campaign c cross join
     (select date from daily_spending
      union  -- on purpose to remove duplicates
      select date from daily_revenue
     ) d left join
     daily_spending ds
     on ds.campaign_id = c.id and ds.date = d.date left join
     daily_revenue dr
     on dr.campaign_id = c.id and dr.date = d.date;
0 голосов
/ 03 января 2019

Для строки, которая не совпадает, вам нужно левое соединение и ifnull для получения значения 0

select a.campaign_id, a.date, a.spending, ifNull(b.revenue,0)
from table Campaign c 
left join Daily_Spending a ON c.compain_id = a.compain_id 
left join Daily_Revenuea  b ON c.compain_id = b.compain_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...