【问题标题】:Find most frequent value in SQL column在 SQL 列中查找最常见的值
【发布时间】:2012-08-27 11:12:22
【问题描述】:

如何在 SQL 表的给定列中找到出现频率最高的值?

例如,对于这个表,它应该返回two,因为它是最常见的值:

one
two
two
three

【问题讨论】:

标签: mysql sql


【解决方案1】:
SELECT
  <column_name>,
  COUNT(<column_name>) AS `value_occurrence` 

FROM
  <my_table>

GROUP BY 
  <column_name>

ORDER BY 
  `value_occurrence` DESC

LIMIT 1;

替换 &lt;column_name&gt;&lt;my_table&gt;。如果要查看列中最常见的N 值,请增加1

【讨论】:

  • 如果我也想从'my_table'中选择其他字段怎么办?换句话说,另一个值;
  • 如果多个值出现相同的次数(最大值)怎么办?在这种情况下,如果三个也出现了两次? LIMIT 1 将只显示一条记录
  • @mustafa1993 SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
  • 为什么我添加WHERE 'value_occurrence' = 1后不起作用?
  • @swisswiss 在这种情况下,您必须使用HAVING 而不是WHERE
【解决方案2】:

如果您有一个 ID 列,并且您想从另一个列中为每个 ID 查找最重复的类别,那么您可以使用以下查询,

表格:

查询:

SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;

结果:

【讨论】:

    【解决方案3】:

    我喜欢使用的一种方式是:

    select ,COUNT()as VAR1 from Table_Name

    分组

    按 VAR1 顺序排列

    限制 1

    【讨论】:

      【解决方案4】:

      以下查询在 SQL Server 数据库中似乎对我有用:

      select column, COUNT(column) AS MOST_FREQUENT
      from TABLE_NAME
      GROUP BY column
      ORDER BY COUNT(column) DESC
      

      结果:

      column          MOST_FREQUENT
      item1           highest count
      item2           second highest 
      item3           third higest
      ..
      ..
      

      【讨论】:

        【解决方案5】:

        假设表是“SalesLT.Customer”,而您要找出的列是“CompanyName”,而AggCompanyName 是别名。

        Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
        group by CompanyName
        Order By Count(CompanyName) Desc;
        

        【讨论】:

          【解决方案6】:

          如果您不能使用 LIMIT 或 LIMIT 不是您的查询工具的选项。您可以改用“ROWNUM”,但需要一个子查询:

          SELECT FIELD_1, ALIAS1
          FROM(SELECT FIELD_1, COUNT(FIELD_1) ALIAS1
              FROM TABLENAME
              GROUP BY FIELD_1
              ORDER BY COUNT(FIELD_1) DESC)
          WHERE ROWNUM = 1
          

          【讨论】:

          • MySQL 没有ROWNUM
          • 对oracle有效,对mysql无效
          • @Prabhu 在 MySQL 中,你使用 LIMIT 1 代替;语法显示在接受的答案中。
          【解决方案7】:

          用于 SQL Server。

          因为没有限制命令支持。

          在这种情况下,你可以使用 top 1 命令来查找特定列中出现的最大值(值)

          SELECT top1 
              `value`,
              COUNT(`value`) AS `value_occurrence` 
          FROM     
              `my_table`
          GROUP BY 
              `value`
          ORDER BY 
              `value_occurrence` DESC;
          

          【讨论】:

          • 您还需要将 COUNT 函数移动到 ORDER BY 部分以避免出现以下错误:当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式
          【解决方案8】:

          让我们将表名视为tblperson,将列名视为city。我想从城市列中检索重复次数最多的城市:

           select city,count(*) as nor from tblperson
                  group by city
                    having count(*) =(select max(nor) from 
                      (select city,count(*) as nor from tblperson group by city) tblperson)
          

          这里nor是一个别名。

          【讨论】:

          • +1 用于使用适用于任何数据库的标准 SQL(而 LIMIT 是 MySQL 特定的,TOP 是 SQL Server 特定的)。
          【解决方案9】:

          尝试类似:

          SELECT       `column`
              FROM     `your_table`
              GROUP BY `column`
              ORDER BY COUNT(*) DESC
              LIMIT    1;
          

          【讨论】:

          • 我不知道你可以直接在ORDER BY 中使用COUNT(*)。我知道GROUP BY/HAVING 和聚合列有一些限制,我一直认为这行不通。
          猜你喜欢
          • 1970-01-01
          • 2017-04-21
          • 2014-08-08
          • 1970-01-01
          • 2021-03-07
          • 2015-06-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多