2012-09-02 16 views
75

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

Por ejemplo, para esta tabla es conveniente devolver two ya que es el valor más frecuente:

one 
two 
two 
three 
+1

GROUP BY versión: http://stackoverflow.com/questions/344665/get-most-common-value-in-sql –

Respuesta

107
SELECT  `value`, 
      COUNT(`value`) AS `value_occurrence` 
    FROM  `my_table` 
    GROUP BY `value` 
    ORDER BY `value_occurrence` DESC 
    LIMIT 1; 
+0

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

+4

¿qué ocurre si aparece más de un valor igual de veces (que es máximo)? En este caso, ¿si tres también aparecieron dos veces? LIMIT 1 mostrará solo un registro – mustafa1993

+0

@ mustafa1993 'SELECT * FROM my_table GROUP BY valor ORDER BY count (*) DESC;' –

27

intentar algo como:

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

No sabía que podía usar 'COUNT (*)' directamente en 'ORDER BY'. Sabía que había algunas restricciones con respecto a 'GROUP BY' /' HAVING' y columnas agregadas, y siempre supuse que no funcionaría. –

2

Para su uso con SQL Server.

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

Yo puede utilizar el comando de 1 parte superior para encontrar el valor máximo se produce en la columna en particular, en este caso (valor)

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

También necesita mover la función COUNT a la sección ORDENAR POR 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 –

9

Consideremos nombre de tabla como tblperson y el nombre de 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í nor es un nombre de alias.

0

Si no puede usar LIMIT o LIMIT no es una opción para su herramienta de consulta. Puede utilizar "ROWNUM" en su lugar, pero se necesita una consulta substitución:

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 
+0

MySQL no tiene 'ROWNUM' – Barmar

+0

Esto es válido para Oracle pero no mysql – Prabhu

+1

@Prabhu en MySQL, utiliza 'LIMIT 1' en su lugar; la sintaxis se muestra en la respuesta aceptada. – ToolmakerSteve

1

Tabla Suponiendo es 'SalesLT.Customer' y la columna que está tratando de averiguar es 'CompanyName' y AggCompanyName es un alias.

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

A continuación consulta 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 
.. 
.. 
Cuestiones relacionadas