Grouping results with left and inner join with zero counts
Build a table with n=1..5 and the comments (positive, etc); lets call
it labels
Get the counts (5 or fewer)
Put together:



SELECT labels.n, labels.comment, IFNULL(x.ct, 0) AS "count"
    FROM labels
    LEFT JOIN ( your big query to get the counts ) x
        ON x.n = labels.n
    ORDER BY labels.n


The principle is "FROM (stuff you want all of) LEFT JOIN (stuff that may be missing some)"