【问题标题】:count top 10 most occuring values in a column in mysql计算 mysql 列中出现次数最多的 10 个值
【发布时间】:2009-12-02 08:25:14
【问题描述】:

我在 mysql 表中有一个数据类型为 INT(11) 的列。

如何搜索以获得该列中出现次数最多的前 10 个值?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT col, count(*)
        FROM tablethingie
        GROUP BY col
        ORDER BY count(*) DESC
        LIMIT 10
    

    【讨论】:

    • 将我的答案标记为删除(-:是否可以使用 count(col) 而不是 count(*) ?嗯,哪个更有效...
    • 好吧,我猜你是第一个改变 mysql 的 :-),我删除我的因此并投票给这个。
    • count(col) 将计算非空值。因为 col 是我们分组的对象,所以无论如何都是一样的。 count() 等价于 count(1),但通常推荐使用后者。 count() 应该是最有效的,只要它正是您需要的。
    • 彼得,mysql 比赛! ;-) 但是你是什么意思“改变”?编辑答案时我唯一改变的是格式,IIRC。
    【解决方案2】:

    试试下面的代码

    SELECT colname, COUNT(*) AS cnt
    FROM tablename
    GROUP BY colname
    ORDER BY cnt DESC
    LIMIT 10
    

    【讨论】:

      【解决方案3】:

      TOP 是 MySQL 中不支持的关键字,但 MSSQL 中支持。

      下面的查询应该做你想做的事(未经测试,但想法应该很清楚):

      SELECT column, COUNT(*) AS matches 
      FROM table 
      GROUP BY column 
      ORDER BY matches DESC 
      LIMIT 10
      

      【讨论】:

      • 赞成反对反对票;因为,据我所知,您的回答对所有其他人同样有效。不过,我确实希望反对者能够解释他们的反对票。这样我们就可以学到一些东西。
      • 饭碗,能解释一下吗? - stackoverflow.com/revisions/1831456/list - 答案在被否决后被编辑以模仿其他人;-)
      • 确实,因为我在回答中看到了错误,所以我更正了它。这样就提供了正确的答案,而不是不工作。保持对问题的高质量回答。
      • Ben Fransen,我不认为你做错了什么。删除您的答案并为正确的答案投赞成票更为常见,但您的行为绝不是犯罪行为;-) 只是它解释了反对票。 (这是我的,我撤销了它)。
      • @hacker,这确实可以解释,但是解释否决票的评论会更快。 ...是的;我可能在我晚年很懒惰=)
      【解决方案4】:

      试试:

      SELECT ColName, Count(1) AS occurances
          FROM
              table
          GROUP BY
              ColName
          ORDER BY
              occurances DESC
          LIMIT
              10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-16
        相关资源
        最近更新 更多