簡體   English   中英

MySQL計數組由和左聯接無法正常工作

[英]Mysql count group by and left join not working as expected

以下是點擊跟蹤廣告的簡單查詢。 我看過很多其他的帖子,我撓頭。 我無法使該查詢正常工作,因此無法顯示日歷表中的所有行(每行一個日歷日):

SELECT DATE_FORMAT(calendar_date, '%a %D') AS calendar_date, 
count( tracker_id ) as clicks
FROM calendar
LEFT JOIN offer_tracker USING(calendar_id)
WHERE 
  calendar_month = Month(CURDATE()) AND 
  calendar_year = Year(CURDATE()) AND ( offer_id = 4 OR offer_id IS NULL )
GROUP BY calendar_date;

它幾乎在那兒,但沒有返回日歷表中的所有行,即沒有第二周五,第二周六,第七周三等:

結果集

有人對我要去哪里出錯有任何想法嗎? 我應該使用子查詢嗎?

我想offer_id來自offer_tracker表。 當您有一個(左)外部offer_id = 4 ,並且在WHERE條件下使用來自右表的字段(例如offer_id = 4 ),則該offer_id = 4實際上被取消,其結果與內部offer_id = 4相同。

取消取消的嘗試( offer_id = 4 OR offer_id IS NULL )無法按您的預期工作。 offer_tracker具有offer_id <> 4任何行均已通過LEFT JOIN,但由於WHERE條件而被刪除。 因此,如果在該日期中, offer_id的行與4的行不同,則結果為Friday 2nd行將不會出現在結果中。


offer_id = 4檢查移到LEFT JOIN ,而不是:

SELECT DATE_FORMAT(calendar_date, '%a %D') AS calendar_date
     , count( tracker_id ) as clicks
FROM calendar
  LEFT JOIN offer_tracker 
    ON  offer_tracker.calendar_id = calendar.calendar_id
    AND offer_id = 4
WHERE calendar_month = Month(CURDATE())
  AND calendar_year = Year(CURDATE()) 
GROUP BY calendar_date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM