有两个表:question和answer。在answer我持有user_id和question_id。我想计算每个选项被选中的次数。
下面是一个有效的查询,但不是将同一个表加入 4 次,而是一种更快的方法,即只加入一次答案表。
SELECT question.question_id,
    question.correct_choice,
    COUNT(DISTINCT a.user_id) as num_of_a,
    COUNT(DISTINCT b.user_id) as num_of_b,
    COUNT(DISTINCT c.user_id) as num_of_c,
    COUNT(DISTINCT d.user_id) as num_of_d
FROM answer a,
    answer b, 
    answer c, 
    answer d,
    question 
WHERE a.question_id = question.question_id 
    AND b.question_id = question.question_id
    AND c.question_id = question.question_id 
    AND d.question_id = question.question_id 
    AND a.choice = 'A' 
    AND b.choice = 'B'
    AND c.choice = 'C' 
    AND d.choice = 'D'  
GROUP BY question.question_id 
ORDER BY question.question_id asc;
返回
273, D, 5, 2, 8, 39
274, C, 2, 14, 50, 2
277, C, 3, 5, 41, 17
278, C, 16, 9, 34, 9
279, C, 8, 30, 24, 12
280, B, 17, 21, 20, 3
284, C, 2, 3, 19, 1
286, A, 16, 3, 2, 2
287, D, 1, 2, 1, 18
289, B, 3, 18, 2, 2
290, D, 6, 9, 8, 6