【问题标题】:Find the row with Maximum Count查找具有最大计数的行
【发布时间】:2015-07-11 11:32:42
【问题描述】:

我需要找到最大计数的行。只有一张桌子,所以应该很容易,但事实并非如此。 以下是表格内容:

+------+------+------+
| row1 | row2 | row3 |
+------+------+------+
|    3 |    2 |    1 |
|    6 |    4 |    5 |
|    6 |    2 |    1 |
+------+------+------+

我需要找到 row1 的最大计数项: 使用: SELECT COUNT(*) AS c, row1 AS 名称 从画 按名称分组; 给我结果:

+------+------+
|   c  | name |
+------+------+
|    1 |    3 |
|    2 |    6 |
+------+------+

但我只想显示最大“c”的一行:

+------+------+
|   c  | name |
+------+------+
|    2 |    6 |
+------+------+

使用: 选择最大(c),名称( SELECT COUNT(*) AS c, row1 AS 名称 FROM draw GROUP BY name ) 作为计数;

给我结果:

+------+------+
|   c  | name |
+------+------+
|    2 |    3 |
+------+------+

这意味着它给出最大计数(c),但给出名称行中的第一个数字。

有办法解决吗?

【问题讨论】:

    标签: mysql sql database select count


    【解决方案1】:

    你可以试试这个

    SELECT COUNT(  `row1` ) AS c,  `row1` 
    FROM  `draw` 
    GROUP BY  `row1` 
    ORDER BY  `row1` DESC 
    LIMIT 1
    

    【讨论】:

    • 如果两个或多个 row1 值具有相同的计数,您的解决方案只显示其中一个。
    • @MaZak 只要您不关心平局,只要返回的 row1 值任意是具有最高排序值(当前降序)的值,它就可以工作。
    【解决方案2】:
    select top 1 row1, count(*)
    from draw
    group by row1
    order by count(*) desc
    

    按计数降序排列(即最高计数优先)并仅取第一个。

    【讨论】:

      【解决方案3】:

      我认为这是您想要的,但您的要求有点不清楚。如果这是任何其他平台,您可以使用窗口函数会更好。

      SELECT *
      FROM (
        SELECT COUNT(*) AS c, row1
        FROM draw 
        GROUP BY row1
      ) as Sub1
      WHERE Sub.c = (
        SELECT Max(c) 
        FROM (
          SELECT COUNT(*) AS c
          FROM draw 
          GROUP BY row1
        ) as Sub2
      ) as Sub3
      

      【讨论】:

        猜你喜欢
        • 2015-10-29
        • 2019-11-14
        • 2018-02-07
        • 2012-01-19
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-12
        相关资源
        最近更新 更多