Encuentra el valor más frecuente en la columna SQL


122

¿Cómo puedo encontrar el valor más frecuente en una columna dada en una tabla SQL?

Por ejemplo, para esta tabla debería regresar twoya que es el valor más frecuente:

one
two
two
three


1
¿Qué hay de los lazos? Agregue otra fila 'tres' a los datos de muestra y especifique el resultado esperado.
jarlh

Respuestas:


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

Reemplazar columny my_table. Aumente 1si desea ver los Nvalores más comunes de la columna.


1
¿Qué debo hacer si quiero seleccionar otros campos también de 'my_table'? En otras palabras, otro valor;
grep

77
¿Qué pasa si más de un valor aparece el mismo número de veces (que es máximo)? En este caso, si tres también aparecieron dos veces? LÍMITE 1 mostrará solo un registro
mustafa1993

1
@ mustafa1993SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
Ahmed Syed

¿Por qué no funciona cuando agrego WHERE 'value_occurrence' = 1?
swisswiss

1
@swisswiss debe usar en HAVINGlugar de WHEREen este caso.
HellBaby

47

Intenta algo como:

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

66
No sabía que podías usar COUNT(*)directamente en el ORDER BY. Sabía que había algunas restricciones con respecto a las columnas agregadas y GROUP BY/ HAVINGy siempre supuse que eso no funcionaría.
Mihai Stancu

21

Consideremos el nombre de la tabla como tblpersony el nombre de la columna como city. Quiero recuperar la ciudad más repetida de la columna de la ciudad:

 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)

Aquí norhay un nombre de alias.


+1 por usar SQL estándar que funcionará en cualquier base de datos (mientras que LIMIT es específico de MySQL, TOP es específico de SQL Server).
Dylan Smith

7

La consulta a continuación parece funcionar bien para mí en la base de datos de SQL Server:

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

Resultado:

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

3

Para usar con SQL Server.

Como no hay soporte de comando de límite en eso.

En este caso, puede usar el comando top 1 para encontrar el valor máximo en la columna en particular (valor)

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

También debe mover la función COUNT a la sección ORDER BY para evitar el siguiente error: solo se puede especificar una expresión en la lista de selección cuando la subconsulta no se introduce con EXISTS
Saba Jamalian

1

Suponiendo que la tabla es " SalesLT.Customer" y la columna que está tratando de averiguar es " CompanyName" y AggCompanyNamees un alias.

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

0

Si no puede usar LIMIT o LIMIT no es una opción para su herramienta de consulta. Puede usar "ROWNUM" en su lugar, pero necesitará una subconsulta:

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 no tieneROWNUM
Barmar

Esto es válido para Oracle pero no mysql
Prabhu

1
@Prabhu en MySQL, usas en su LIMIT 1lugar; La sintaxis se muestra en la respuesta aceptada.
ToolmakerSteve

0

Si tiene una columna de ID y desea encontrar la categoría más repetitiva de otra columna para cada ID, puede usar la consulta a continuación,

Mesa:

Contenido de la tabla

Consulta:

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

Resultado:

Resultado de la consulta


-1

Una forma que me gusta usar es:

Seleccione ,CONTAR() como VAR1 de Table_Name

agrupar por

ordenar por VAR1 desc

límite 1

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.