我有以下表格:
POLLS id | name | colour ------------------------- 1 | first poll | orange 2 | secon poll | blue 3 | third poll | green QUESTIONS id | poll_id | what_to_ask --------------------------- 1 | 1 | How nice is stackoverflow? 2 | 1 | Why do you think that? 3 | 2 | What do you like to eat? CHOICES id | question_id | choice_text ------------------------------------ 1 | 1 | Very nice 2 | 1 | Moderatley nice 3 | 1 | Evil 4 | 2 | Etc. Answers id | choice_id | poll_id | question_id -------------------------------------- 1 | 1 | 1 | 1 2 | 1 | 1 | 1 3 | 2 | 1 | 1 4 | 3 | 1 | 1 5 | 1 | 1 | 1
我试图撤回以下内容:
如果每个选项都有答案,我的查询(如下)效果很好,但如果只有一个答案(可能还有3个选项),那么它只会返回一行。
我怎样才能将每个答案都带回一个民意调查,然后是每个答案的答案数量和答案百分比。
SELECT Count(a.choice_id) AS answer_count,
q.what_to_ask,
c.id,
c.choice_text,
COALESCE (Count(a.choice_id) * 100.0 / NULLIF((SELECT Count(*)
FROM answers
WHERE poll_id = 2), 0), 0
) AS percentage
FROM choices c
RIGHT OUTER JOIN answers a
ON a.choice_id = c.id
INNER JOIN polls p ON p.id = a.poll_id
INNER JOIN questions q ON c.question_id = q.id
WHERE p.id = 2
GROUP BY c.id, q.what_to_ask, c.choice_text
我会改变LEFT JOIN
的选择和答案之间的联接:
SELECT Count(a.choice_id) AS answer_count,
q.what_to_ask,
c.id,
c.choice_text,
COALESCE (Count(a.choice_id) * 100.0 / NULLIF((SELECT Count(*)
FROM answers
WHERE poll_id = 2), 0), 0
) AS percentage
FROM choices c
LEFT JOIN answers a
ON a.choice_id = c.id
INNER JOIN polls p ON p.id = a.poll_id
INNER JOIN questions q ON c.question_id = q.id
WHERE p.id = 2
GROUP BY c.id, q.what_to_ask, c.choice_text
在使它成为RIGHT JOIN
时,您告诉查询仅在答案表中存在匹配时才返回行。