Estoy tratando de encontrar una consulta MySQL que encuentre valores DISTINCT en un campo en particular, cuente el número de ocurrencias de ese valor y luego ordene los resultados por conteo.
ejemplo db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
Resultado Esperado
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
en unawhere
cláusula porque es un funciones de agregado. También recibe un mensaje muy poco útil: "Uso no válido de la función de grupo". La forma correcta es alias de la cuentaname,COUNT(*) as cnt
y añadir una cláusula having de este modo:HAVING count > 1
.HAVING
es para condiciones que deben aplicarse después de la agregación, mientras queWHERE
es para condiciones que deben aplicarse antes. (Otra forma de pensar en esto es que seWHERE
aplica a los datos de la fila original; seHAVING
aplica a los datos de la fila de salida.)¿Qué pasa con algo como esto?
Está seleccionando el nombre y la cantidad de veces que aparece, pero agrupando por nombre para que cada nombre se seleccione solo una vez.
Finalmente, ordena por la cantidad de veces en orden DESCending, para que los usuarios que aparecen con más frecuencia sean lo primero.
fuente
SELECT COUNT(DISTINCT name) as count FROM your_table
Para un recuento de las filas totales de la tabla, haga la consulta de Pascal sin lagroup by
declaración.Acabo de cambiar el COUNT de Amber (*) a COUNT (1) para un mejor rendimiento.
fuente