我有一个类似于以下内容的表结构:
表格 poll_answers
----------------------------------------------------------------
| LONG id | LONG question_id | LONG user_id | TEXT answer |
----------------------------------------------------------------
用户对民意调查的答案会被存储到数据库中。 poll_answer
是一个字符串,不同用户的许多答案都可以相同。
我想查询数据库以列出每个唯一poll_answer
的编号。
使用id
123的投票问题示例可能是:
xyz出生在哪个月?
数据库可能如下所示:
----------------------------------------------------------------
| LONG id | LONG question_id | LONG user_id | TEXT answer |
----------------------------------------------------------------
| 0 | 123 | 1000 | monday |
| 1 | 123 | 1001 | tuesday |
| 2 | 123 | 1003 | monday |
| 3 | 123 | 1002 | monday |
| 4 | 123 | 1004 | thursday |
| 5 | 123 | 1025 | monday |
----------------------------------------------------------------
如何查询数据库,以便得到如下列表:
monday => 4
tuesday => 1
thursday => 1
我能想到的唯一一个问题是使用n
个查询,其中n
是不同可能poll_answer
的数量。
SELECT UNIQUE answer FROM poll_answers
对于每个结果,
SELECT COUNT(*) FROM poll_answers where answer = {the_answer}
有更有效的方法吗?
编辑:
作为奖励,我还想知道从效率方面来说,通过哈希生成并在表和组中存储answer
的哈希值(MD5)是一种很好的做法。 / p>
答案 0 :(得分:2)
试试这个:
SELECT answer,COUNT(*) as uniqans FROM poll_answers group by answer
答案 1 :(得分:1)
如果您需要获得所有问题的答案,请尝试使用此查询。它还按受欢迎程度为每个查询命令答案:
SELECT question_id,
answer,
COUNT(*) as answerCount
FROM poll_answers
GROUP BY question_id, answer
ORDER BY question_id, answerCount DESC