Skip to content
Advertisement

Reverse group by and counts

I have tables for questions and answers. Each question can have 0 or multiple answers. When you left join the tables you get something like this:

q1   a1
q1   a2
q2   a3
q3   NULL
q4   NULL
q5   a4
q6   NULL
q7   a5
q7   a6

What I need is the number of answers, and number of questions that have those many answers. i.e.,

number_of_answers    number_of_questions_that_have_that_many_answers
0                    3
1                    2
2                    2

What kind of SQL query in Redshift will solve this?

Advertisement

Answer

Another level of GROUP BY should do it:

SELECT answer_count, COUNT(*) AS number_of_questions
FROM (
    SELECT q.id, COUNT(a.id) AS answer_count
    FROM questions q
    LEFT JOIN answers a ON a.question_id = q.id
    GROUP BY q.id
) AS x
GROUP BY answer_count
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement