#mysql
#mysql
Вопрос:
У меня есть свой запрос, как показано ниже
SELECT dates, COUNT(link_data_id) as TotalClicks, sum(case when link_redirect_status = 1 then 1 else 0 end) AS GoodClicks, sum(case when link_redirect_status != 1 then 1 else 0 end) AS BadClicks FROM tbl_calendar LEFT JOIN tbl_links_data ON dates = CAST(link_data_time AS DATE) WHERE (`dates` BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY)) GROUP BY dates
Это дает мне ожидаемый результат, как показано ниже
Но я хочу добавить еще одно условие под названием link_order_id =’abcde’, поэтому я пытаюсь, как показано ниже
SELECT dates, COUNT(link_data_id) as TotalClicks, sum(case when link_redirect_status = 1 then 1 else 0 end) AS GoodClicks, sum(case when link_redirect_status != 1 then 1 else 0 end) AS BadClicks FROM tbl_calendar LEFT JOIN tbl_links_data ON dates = CAST(link_data_time AS DATE) WHERE link_order_id = 'abcde' AND (`dates` BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY)) GROUP BY dates
Но это дает мне только две строки, как показано ниже
Почему я получаю только две строки вместо 8 строк, как на первой картинке?
Комментарии:
1. Похоже
link_order_id
, это столбец изtbl_links_data
таблицы. Если это так, то вы должны переместить условие по нему из предложения WHERE в предложение ON (в КОТОРОМ оно преобразует ЛЕВОЕ соединение во ВНУТРЕННЕЕ).
Ответ №1:
Переместите критерии в WHERE
предложении в ON
предложение объединения:
SELECT c.dates, COUNT(d.link_data_id) AS TotalClicks, SUM(CASE WHEN d.link_redirect_status = 1 THEN 1 ELSE 0 END) AS GoodClicks, SUM(CASE WHEN d.link_redirect_status != 1 THEN 1 ELSE 0 END) AS BadClicks FROM tbl_calendar c LEFT JOIN tbl_links_data d ON c.dates = CAST(d.link_data_time AS DATE) AND d.link_order_id = 'abcde' WHERE (c.dates BETWEEN '2021-11-28' AND DATE_ADD('2021-11-28', INTERVAL 7 DAY)) GROUP BY c.dates;