如何执行COUNT()或COUNT(*)

时间:2010-05-27 04:36:33

标签: mysql count

我在数据库中有一个标签列表。

例如:

villan
hero
spiderman
superman
superman

我希望按升序获取标签名称的排序列表,以及唯一标签在数据库中出现的次数。我写了这段代码:

例如:

 SELECT hashtag.tag_name
      , COUNT( * ) AS number
   FROM hashtag 
  GROUP BY hashtag.tag_name
  ORDER BY hashtag.tag_name ASC

这会产生正确的结果:

 hero      , 1
 spiderman , 1
 superman  , 2
 villan    , 1

如何获取整个列表的完整COUNT。在这种情况下答案应该是4,因为自然有4行。如果没有语句失败,我似乎无法获得正确的COUNT()。

非常感谢你的帮助! :)

4 个答案:

答案 0 :(得分:6)

SELECT COUNT(DISTINCT `tag_name`) FROM `hashtag`

答案 1 :(得分:1)

使用COUNT DISTINCT(hashtag.tag_name) - 它不能与你拥有的SELECT相同(当然除了UNION),但是它自己SELECT (或适当的UNION)它会给出你想要的结果。

答案 2 :(得分:0)

我不确定my-sql中的查询,但是这个可以和oracle一起使用。

SELECT hashtag.tag_name, count(*) FROM hashtag GROUP BY cube(hashtag.tag_name)

答案 3 :(得分:0)

要完全按照您描述的方式 (为了获得结果列表的完整计数),您需要计算结果的 ,像:

SELECT COUNT(*) AS uniquetags
FROM (SELECT hashtag.tag_name, COUNT( * ) AS number
      FROM hashtag GROUP BY hashtag.tag_name
      ORDER BY hashtag.tag_name ASC)

当然ORDER BY子句是不必要的,并且被外部聚合COUNT吞噬,内部COUNT也是如此。

此外,正如少数人所指出的,这方面的捷径是COUNT DISTINCT,如:

SELECT COUNT(DISTINCT hashtag.tag_name)
FROM hashtag

这可能会也可能不会更有效地使用索引,具体取决于它是否意识到它不必计算所有内容。有更多知识的人,请随时发表评论(或者只是尝试一对EXPLAIN)。