在“ SQL”列中查找最频繁的值


Answers:


180
SELECT       `column`,
             COUNT(`column`) AS `value_occurrence` 
    FROM     `my_table`
    GROUP BY `column`
    ORDER BY `value_occurrence` DESC
    LIMIT    1;

替换columnmy_table1如果要查看列的N最常用值,请增加。


1
如果我也想从“ my_table”中选择其他字段,该怎么办?换句话说,另一个价值;
grep

7
如果多个值出现相同的次数(最大)怎么办?在这种情况下,如果三个也出现两次?LIMIT 1仅显示一条记录
mustafa1993 '16

1
@ mustafa1993SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
艾哈迈德·

为什么我添加时不起作用WHERE 'value_occurrence' = 1
swisswiss

1
@swisswiss必须使用HAVING,而不是WHERE在这种情况下。
HellBaby

47

尝试类似的方法:

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

6
我不知道您可以COUNT(*)直接在中使用ORDER BY。我知道关于GROUP BY/ HAVING和聚合列有一些限制,我一直认为那是行不通的。
Mihai Stancu 2012年

21

让我们将表名视为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特定的)。
迪伦·史密斯

7

下面的查询似乎对我在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
..
..

3

与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未引入子查询时,只能在选择列表中指定一个表达式
Saba Jamalian

1

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

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

0

如果您不能使用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
-Barmar

这对oracle有效,但对mysql不有效
Prabhu

1
MySQL中的@Prabhu,您可以LIMIT 1改用;语法显示在接受的答案中。
ToolmakerSteve

0

如果您有一个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;

结果:

查询结果


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.