2014-09-29 5 views
0

Я пытаюсь объединить результаты двух запросов SQL ниже:Как «слить» два набора результатов по дате

стол дата загрузки

SELECT DATE(`timestamp`), SUM(uploaded) AS total_upload FROM uploads; 

date   total_download 

2014-09-11 1000 
2014-09-12 1000 
2014-09-13 1000 

загрузки таблицы

SELECT DATE(`timestamp`), SUM(downloaded) AS total_download FROM downloads; 

date   total_upload 

2014-09-09 1000 
2014-09-10 1000 
2014-09-11 1000 

И я хотел бы получить следующие результаты с пустыми результатами, если нет загрузок и пустых результатов wh прежде чем нет никаких загрузки:

date   total_download total_upload 

2014-09-09      1000 
2014-09-10      1000 
2014-09-11 1000    1000 
2014-09-12 1000 
2014-09-13 1000 

Я думал, что я мог бы оставил соединить таблицы на download_date = UPLOAD_DATE, но, очевидно, в дни, когда там нет загрузки будет отсутствовать. Как я могу правильно объединить эти результаты?

ответ

1

Используйте FULL JOIN с COALESCE().

SELECT COALESCE(u.date, d.date) AS date, 
    u.total_upload AS total_upload, 
    d.total_download as total_download 
FROM (SELECT DATE(`timestamp`) AS date, SUM(uploaded) AS total_upload FROM uploads) as u 
FULL OUTER JOIN (SELECT DATE(`timestamp`) AS date, SUM(downloaded) AS total_download FROM downloads) as d 
    ON u.date = d.date 

Синтаксис может отсутствовать; Я ржавый с MySQL.

Редактировать: Если вы хотите точно заполнить пробелы, вам нужно будет заменить: COALESCE(CAST(u.total_upload AS varchar),'') AS total_upload или тому подобное. Обратите внимание, что это фактически изменяет ваши выходные типы данных на символы.

Смежные вопросы