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(*) > 1en unawhereclá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 cnty añadir una cláusula having de este modo:HAVING count > 1.HAVINGes para condiciones que deben aplicarse después de la agregación, mientras queWHEREes para condiciones que deben aplicarse antes. (Otra forma de pensar en esto es que seWHEREaplica a los datos de la fila original; seHAVINGaplica 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_tablePara un recuento de las filas totales de la tabla, haga la consulta de Pascal sin lagroup bydeclaración.Acabo de cambiar el COUNT de Amber (*) a COUNT (1) para un mejor rendimiento.
fuente