¿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 two
ya que es el valor más frecuente:
one
two
two
three
¿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 two
ya que es el valor más frecuente:
one
two
two
three
Respuestas:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Reemplazar column
y my_table
. Aumente 1
si desea ver los N
valores más comunes de la columna.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
lugar de WHERE
en este caso.
Intenta algo como:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
directamente en el ORDER BY
. Sabía que había algunas restricciones con respecto a las columnas agregadas y GROUP BY
/ HAVING
y siempre supuse que eso no funcionaría.
Consideremos el nombre de la tabla como tblperson
y 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í nor
hay un nombre de alias.
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
..
..
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;
Suponiendo que la tabla 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;
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
ROWNUM
LIMIT 1
lugar; La sintaxis se muestra en la respuesta aceptada.
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:
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: