查询MySQL数据库以获取唯一的列值计数

时间:2014-05-14 13:16:45

标签: mysql database

我有一个类似于以下内容的表结构:

表格 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>

2 个答案:

答案 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

SQLFiddle demo