代码之家  ›  专栏  ›  技术社区  ›  ninu

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

  •  5
  • ninu  · 技术社区  · 14 年前

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

    前任:

    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()。

    非常感谢你的帮助!:)

    4 回复  |  直到 14 年前
        1
  •  6
  •   zerkms    14 年前
    SELECT COUNT(DISTINCT `tag_name`) FROM `hashtag`
    
        2
  •  1
  •   Alex Martelli    14 年前

    使用 COUNT DISTINCT(hashtag.tag_name) --它不能进去 SELECT 你有(除了 UNION 当然),但是在 选择 它自己的(或适当的 联合 )它会给出你想要的结果。

        3
  •  0
  •   M.J.    14 年前

    我对我的SQL中的查询不确定,但这个查询在Oracle中可以正常工作。

    SELECT hashtag.tag_name, count(*) FROM hashtag GROUP BY cube(hashtag.tag_name)
    
        4
  •  0
  •   lc.    14 年前

    做这件事 就像你描述的那样 (要获得结果列表的完整计数),您需要进行计数 结果的 ,像:

    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 DISTINCT ,如:

    SELECT COUNT(DISTINCT hashtag.tag_name)
    FROM hashtag
    

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