我在数据库中有一个标签列表。
例如:
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()。
非常感谢你的帮助! :)
答案 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
)。