[英]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.