Supponendo che tu abbia una tabella di numeri interi (chiamata `numbers`
sotto):
SELECT COALESCE(n, 0) AS num_complaints, CONCAT('Week ', i) AS `week`
FROM (SELECT i
FROM numbers
WHERE i BETWEEN (SELECT WEEK(MIN(complaintRaisedDate)) FROM events LIMIT 1)
AND
(SELECT WEEK(MAX(complaintRaisedDate)) FROM events LIMIT 1))
week_ranges
LEFT JOIN ( SELECT count(id) AS n, WEEK(complaintRaisedDate) AS weeknum
FROM events
WHERE categoryId=1
GROUP BY weeknum) weekly_tallies
ON week_ranges.i = weekly_tallies.weeknum
ORDER BY `week` ASC;