sql >> Base de Datos >  >> RDS >> Database

¿Cómo ordenar por conteo en SQL?

Problema:

Agregaste datos en grupos, pero deseas ordenar los registros en orden descendente por la cantidad de elementos en los grupos.

Ejemplo:

Nuestra base de datos tiene una tabla llamada user con datos en las siguientes columnas:id , first_name , last_name y country .

id nombre apellido país
1 Lisa Williams Inglaterra
2 Gary Andres Polonia
3 Tom Williams Polonia
4 Miguel Marrón Francia
5 Susana Smith Estados Unidos
6 Ana Jones Estados Unidos
7 Ellie Molinero Polonia

Vamos a crear un informe sobre nuestros usuarios. Agruparemos los resultados por country y contar el número de usuarios de cada país. Pero también ordenaremos los grupos en orden descendente por número de usuarios. De esa forma, los países con mayor número de usuarios aparecerán en la parte superior.

Solución:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id) DESC ;
país cuenta(id)
Polonia 3
EE.UU. 2
Inglaterra 1
Francia 1

Discusión:

Para ordenar los registros seleccionados por el número de elementos en cada grupo, utilice el ORDER BY cláusula.

El primer paso es usar el GROUP BY cláusula para crear los grupos (en nuestro ejemplo, agrupamos por el country columna). Luego, en la cláusula ORDER BY, usa la función agregada COUNT, que cuenta el número de valores en la columna de su elección; en nuestro ejemplo, contamos identificaciones distintas con COUNT(id) . Esto cuenta efectivamente el número de elementos en cada grupo. El ORDER BY luego ordena los grupos de acuerdo con ese cálculo.

Como de costumbre, puede usar tanto el orden ascendente como el descendente con ORDER BY . Si desea un orden descendente (como en este ejemplo), use el DESC palabra clave. El orden ascendente no necesita ninguna palabra clave porque es el predeterminado, pero puede usar el ASC palabra clave si desea ser explícito. Este es el mismo ejemplo pero con los resultados ordenados en orden ascendente:

Solución:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id);

Aquí está el resultado:

país cuenta(id)
Inglaterra 1
Francia 1
EE.UU. 2
Polonia 3