2010-05-27 40 views
5

我有一个数据库中的标签列表。如何执行COUNT()或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 

我怎样才能获得这个整个列表的全部计数值。在这种情况下答案应该是4,因为自然有4行。如果没有语句失败,我似乎无法得到正确的COUNT()。

非常感谢您的帮助! :)

回答

6
SELECT COUNT(DISTINCT `tag_name`) FROM `hashtag` 
+0

非常感谢你解决了这个问题,我知道这一点,我甚至都没有想过。 – ninu 2010-05-27 04:47:19

+0

然后我会很感激,所以你接受这个让我成为3k + SF会员;-) – zerkms 2010-05-27 04:53:56

+1

我会做的!另外,我认为你很困惑;这upvote不会改变你在SF的代表:) – 2010-05-27 04:55:48

1

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

0

我不确定在my-sql中的查询,但这个与oracle正常工作。

SELECT hashtag.tag_name, count(*) FROM hashtag GROUP BY cube(hashtag.tag_name) 
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 s)。