在 SQL 列中查找最常见的值
Posted
技术标签:
【中文标题】在 SQL 列中查找最常见的值【英文标题】:Find most frequent value in SQL column 【发布时间】:2012-08-27 11:12:22 【问题描述】:如何在 SQL 表的给定列中找到出现频率最高的值?
例如,对于这个表,它应该返回two
,因为它是最常见的值:
one
two
two
three
【问题讨论】:
GROUP BY 版本:***.com/questions/344665/get-most-common-value-in-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;
替换 <column_name>
和 <my_table>
。如果要查看列中最常见的N
值,请增加1
。
【讨论】:
如果我也想从'my_table'中选择其他字段怎么办?换句话说,另一个值; 如果多个值出现相同的次数(最大值)怎么办?在这种情况下,如果三个也出现了两次? LIMIT 1 将只显示一条记录 @mustafa1993SELECT * 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
和聚合列有一些限制,我一直认为这行不通。以上是关于在 SQL 列中查找最常见的值的主要内容,如果未能解决你的问题,请参考以下文章